草庐IT

java - Java中如何获取Instrumentation实例

我正在尝试编写一个简单的ObjectUtils类,其中包含所有对象的各种实用方法。我想让其中一个叫做getObjectSize(Object),你可以在其中传递一个实例化的对象,它会返回对象在内存中的大小:publicclassObjectUtils{privatestaticvolatileInstrumentationinstrumentation;publicstaticfinallonggetObjectSize(finalObjectp_oToGauge){returninstrumentation.getObjectSize(p_oToGauge);}}但是,似乎为了获得一

java - 不能消耗全部内存

我正在尝试编写一个应该消耗特定大小内存的程序。我想知道的一个问题是,当堆中实际上有空闲空间时,我得到了outOfMemory异常。代码如下:importjava.util.Vector;importjava.lang.*;publicclassMemoryEater1{publicstaticvoidmain(String[]args){try{longmb=Long.valueOf(args[0]);Vectorv=newVector();Runtimert=Runtime.getRuntime();while(true){if(v.size()>0){if(((long)v.siz

PermGen 空间中的 Java 类大小

关于Java对象的大小有很多问答,这很容易理解。但是我想知道PermGen空间中Java类的大小。我对此感到疑惑的原因是因为我正在编写一个代码生成器,生成很多类。本质上,我为数据库中的每个表/View生成两个类。现在我也想建模外键关系。与其维护一个复杂的、可序列化的对象结构(考虑一个表有一个唯一的键被属于其他表有其他外键等的几个外键引用),我更愿意为每个UNIQUE生成一个类KEY和每个FOREIGNKEY一类。这是我的问题:我将为此创建多少类加载器和PermGen空间的开销?public类、static类和private成员类之间有区别吗?您是否看到在源代码中生成外键信息的更好方法?

java - java的UTF-8字符串类

我需要在内存中保存大量字符串对象(数百MB)并且我想以UTF-8格式保存它们,因为在大多数情况下它需要默认实现使用的内存的一半。默认的String类需要12个字符的字符串60个字节(参见http://blog.griddynamics.com/2010/01/java-tricks-reducing-memory-consumption.html)。我的大多数字符串都是10-20个字符长。我想知道是否有一些开源库为此类字符串提供包装器?我知道如何将String转换为UTF-8字节数组,但我正在寻找一个包装类,它将提供所有需要的实用程序函数(Hash、Equal、toString、fro

原生 C 和 Fortran 代码的 Java 内存泄漏

我正在开发一个旧的java程序,其中包含一个带有Fortran调用的native库。所以,我有Java通过JNI调用C,然后调用Fortran。在生产中我们有一个内存不足的错误,比如:Nativememoryallocation(malloc)failedtoallocate120000bytesforjfloatinC:\BUILD_AREA\jdk6_37\hotspot\src\share\vm\prims\jni.cpp我怀疑是内存泄漏。我是公司的新人,我想在Linux上工作,但他们让我在Windows上工作:(在生产环境下,我们使用.so文件,因为我们在solaris上,而我

Java BufferedImage 内存消耗

我们的应用程序生成图像。BufferedImage消耗的内存产生内存不足异常:java.lang.OutOfMemoryError:Javaheapspace这发生在以下行中:BufferedImageresult=newBufferedImage(2540,2028,BufferedImage.TYPE_INT_ARGB);在这条指令之前检查空闲内存时,它显示我有108MB空闲内存。我用来检查内存的方法是:Runtimert=Runtime.getRuntime();rt.gc();longmaxMemory=rt.maxMemory();longusedMemory=rt.tota

java - 与 Java 堆大小作斗争,本地 Java 和 Java web 启动之间的巨大差异

上周末我接到一个客户的电话,告诉我他们的Java程序在导入数据时没有响应。数据是一个包含4个工作表的简单Excel工作簿。正在从列中读取所有数据并将其添加到数据库中。所以我开始调查并得到了一些奇怪的结果。使用RuninNetbeans测试导入。这使用Java64位实例:第一次运行第二次运行使用JavaWebstart测试导入。这是通过打开JNLP文件并使用Java32位实例启动的:第一次运行在这种情况下,我遇到了客户报告的相同问题,程序在导入过程进行了一段时间后停止响应。这是因为据我所知,我已达到最大堆大小(红色圆圈)。第二次运行所以我决定通过将以下内容添加到我的JNLP文件来增加初始

java - 异常的内存分配

您能解释一下,Exception实例或其子实例在内存中的分配位置吗?是堆还是栈,还是别的?谢谢! 最佳答案 对于大多数JVM来说,所有的Object都是在堆上创建的,Exception也不异常(exception)。;)JVM可以使用EscapeAnalysis在堆栈上分配对象,但这通常仅限于仅在一种方法中使用且不返回的对象。也就是说,Exceptions不太可能是一个好的候选者。在许多JVM上创建Throwables(包括Exception)的方式的一个特别之处在于,直到需要它们时才会创建堆栈跟踪元素。这是因为大多数时候不需要它们

java - 在Java中使用大型XML DOM时减少内存占用

我们的应用程序需要获取以XML格式(几个文件)呈现的客户端数据,并将其解析为我们的通用XML格式(带有模式的单个文件)。为此,我们使用apache的XMLBeans数据绑定(bind)框架。下面简要描述此过程的步骤。首先,我们将原始java.io.File对象指向磁盘上的客户端XML文件,并将其加载到集合中。然后,我们遍历此集合,每个文件创建一个apache.xmlbeans.XmlObject。在将所有文件解析为XmlObjects之后,我们创建4个集合,其中包含我们感兴趣的XML文档中的各个对象(很显然,这些不是手工创建的对象,但是我只能描述为创建的“代理”对象由apache的XM

java - 将文件的字节数组加载到内存中

我正在尝试将jar文件直接加载到内存中,而不是将其放到HDD中。我尝试使用ClassLoader,但出现错误。这是我的代码:自定义类加载器publicclassCLS_ClassLoaderextendsClassLoader{privatebyte[]bArrData;publicCLS_ClassLoader(ClassLoaderparent,byte[]bArrData){super(parent);this.bArrData=bArrData;}publicClassloadClass(Stringname)throwsClassNotFoundException{retur