java.lang.OutOfMemoryError:java堆空间
我在执行多线程程序时遇到以下错误java.lang.OutOfMemoryError:java堆空间,java,multithreading,out-of-memory,heap-memory,Java,Multithreading,Out Of Memory,Heap Memory,我在执行多线程程序时遇到以下错误 java.lang.OutOfMemoryError: Java heap space 上述错误发生在其中一个线程中 据我所知,堆空间仅由实例变量占用。如果这是正确的,那么为什么在创建对象时为实例变量分配了空间,因此在正常运行一段时间后会发生此错误 有没有办法增加堆空间 我应该对我的程序做哪些更改,以使它占用更少的堆空间 要增加堆大小,可以在启动Java时使用-Xmx参数;e、 g -Xmx256M 不,我想你是在考虑堆栈空间。堆空间被对象占用。增加堆空间的
java.lang.OutOfMemoryError: Java heap space
上述错误发生在其中一个线程中
要增加堆大小,可以在启动Java时使用-Xmx参数;e、 g
-Xmx256M
不,我想你是在考虑堆栈空间。堆空间被对象占用。增加堆空间的方法是-Xmx256m,将256替换为命令行上所需的数量。如果要增加堆空间,可以在命令行上使用
java-Xms-Xmx
。默认情况下,这些值基于JRE版本和系统配置。你会发现的
但是,我建议您分析应用程序,以了解堆大小被占用的原因。NetBeans附带了一个。我相信它使用了引擎盖下的。使用探查器,您可以尝试查找创建许多对象的位置、对象被垃圾回收的时间等等。1。-是的,但它几乎涉及程序使用的整个内存 2.-是,请参见Java虚拟机选项
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
-Xms设置初始Java堆大小
-Xmx设置最大Java堆大小
即
java-Xmx2g
为应用程序分配最大2G的ram
但是你应该先看看你是否没有内存泄漏
3.-这取决于计划。尝试查找内存泄漏。这个问题很难回答。最近,您可以使用JConsole进行评测,试图找出内存的去向
-Xmx
选项new
分配新对象时,堆空间都会被用完,并且在对象不再被引用后释放一段时间。因此,请确保不要保留对不再需要的对象的引用您可能希望查看此站点以了解有关JVM中内存的更多信息: 我发现用它来观察内存模型的不同部分是如何填满的,以确定要更改什么是有用的 很难确定内存的哪个部分被填满了,因此visualgc,因为您可能只想更改有问题的部分,而不是说 很好!我将向JVM提供1G的RAM 试着更精确地描述你在做什么,从长远来看,你可能会发现这个程序更适合你 要确定内存泄漏的位置,您可以使用单元测试,通过测试测试之前和之后的内存,如果有太大的更改,您可能需要检查它,但是,您需要在测试仍在运行时进行检查
您可以通过下面的程序获得堆内存大小
public class GetHeapSize {
public static void main(String[] args) {
long heapsize = Runtime.getRuntime().totalMemory();
System.out.println("heapsize is :: " + heapsize);
}
}
因此,您还可以使用以下方法增加堆大小:
java-Xmx2g
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)