Java 检测OutOfMemoryError-使用G1时出现意外行为
在阅读了这篇文章之后,我们决定在我们的项目中实现这样一个内存不足检测。不幸的是,对于G1 GC,它不能像预期的那样工作 使用的Java 检测OutOfMemoryError-使用G1时出现意外行为,java,memory-management,out-of-memory,g1gc,Java,Memory Management,Out Of Memory,G1gc,在阅读了这篇文章之后,我们决定在我们的项目中实现这样一个内存不足检测。不幸的是,对于G1 GC,它不能像预期的那样工作 使用的内存\u收集\u阈值\u的javadoc超过了说明 通知类型,表示在Java虚拟机花费精力回收内存池中未使用的对象后,内存池的内存使用率大于或等于其集合使用率阈值。此通知由MemoryMXBean发出。此通知类型的值为java.management.memory.collection.threshold.Excepended 当使用G1 GC时,所提到的在回收未使用对象方
内存\u收集\u阈值\u的javadoc超过了说明
通知类型,表示在Java虚拟机花费精力回收内存池中未使用的对象后,内存池的内存使用率大于或等于其集合使用率阈值。此通知由MemoryMXBean发出。此通知类型的值为java.management.memory.collection.threshold.Excepended
当使用G1 GC时,所提到的在回收未使用对象方面花费的精力并不意味着完全GC。内存使用率测量太频繁,而不仅仅是在完全GC之后。这可能会导致过早的低内存检测
你有没有遇到过类似的问题?您对此有什么解决方案吗?至少,旧一代的收集必须已经发生,才能超过收集阈值并发出通知。纯年轻的集合无法触发通知。除此之外,这似乎是一个正确阈值的问题,即通知阈值应(显著)高于触发并发收集的阈值(0.65 IIRC)。