Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gc堆分配和我的java程序之间的比率_Java_Memory_Garbage Collection - Fatal编程技术网

gc堆分配和我的java程序之间的比率

gc堆分配和我的java程序之间的比率,java,memory,garbage-collection,Java,Memory,Garbage Collection,我的应用程序抛出java.lang.OutOfMemoryError:超出了GC开销限制。我搜索了一下,得到了足够的信息。甲骨文说: 原因:详细消息“超出GC开销限制”表示垃圾收集器一直在运行,Java程序进展非常缓慢。垃圾收集之后,如果Java进程花费大约98%以上的时间进行垃圾收集,并且恢复的堆不到2%,并且一直在进行最后5次(编译时常量)连续垃圾收集,则会抛出Java.lang.OutOfMemoryError。通常会引发此异常,因为活动数据的数量几乎无法放入Java堆,因此新分配的可用空

我的应用程序抛出
java.lang.OutOfMemoryError:超出了GC开销限制。我搜索了一下,得到了足够的信息。甲骨文说:

原因:详细消息“超出GC开销限制”表示垃圾收集器一直在运行,Java程序进展非常缓慢。垃圾收集之后,如果Java进程花费大约98%以上的时间进行垃圾收集,并且恢复的堆不到2%,并且一直在进行最后5次(编译时常量)连续垃圾收集,则会抛出Java.lang.OutOfMemoryError。通常会引发此异常,因为活动数据的数量几乎无法放入Java堆,因此新分配的可用空间很小。 操作:增加堆大小。超出GC开销限制的java.lang.OutOfMemoryError异常可以使用命令行标志-XX:-UseGCOverdeLimit关闭

我的问题是,;如何跟踪由
GC
和java程序分配的堆。我尝试了
jstat-gcutil
,但是没有足够的信息。有没有一个工具可以让我看到java程序堆分配与
GC
堆分配之间的比率? 感谢您的建议。

请注意,这不是“java堆”与“gc堆分配”,而是专用于实际程序的CPU时间与专用于gc的CPU时间。当大部分时间都花在垃圾收集器中时,会引发异常

当分配的堆接近其最大大小(选项)并且堆中的大多数对象都是空的时,就会发生这种情况。您的工作是查找最大大小是否太小(可能是使用默认值),还是内存泄漏(阻止收集大型树的对象)

在处理这个问题时,我更喜欢使用jvisualvm,它是OracleJDK提供的,提供实时图形信息


最新的JVM比以前的JVM提供更详细的信息,但它们也使用不同的GC算法,这可能会改变观察到的结果。

jconsole或商业分析器,例如JProfiler我应该使用结果集进行db操作吗?我有700万条记录要选择和插入。我已经使用了8个线程。当我使用visualvm跟踪时,堆大小分配从最大486 mb开始。我的程序仍在工作,堆大小现在约为516 mb。这不是我想要的东西。它正在缩小。对此有何评论?这会有帮助的