作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我收到 OutOfMemoryException
,而堆似乎仍然有足够的剩余空间。
我自己的日志报告 - VM 内存使用了 48G 中的 22.28G
来自-XX:+PrintGCDetails -XX:+PrintAdaptiveSizePolicy -XX:+UnlockDiagnosticVMOptions -XX:+G1PrintHeapRegions
的日志似乎同意仅使用48G中的25G
[Eden: 0.0B(2448.0M)->0.0B(2448.0M) Survivors: 0.0B->0.0B Heap: 24.9G(48.0G)->24.9G(48.0G)]
159.360: [G1Ergonomics (Heap Sizing) attempt heap expansion, reason: allocation request failed, allocation request: 48 bytes]
159.360: [G1Ergonomics (Heap Sizing) expand the heap, requested expansion amount: 16777216 bytes, attempted expansion amount: 16777216 bytes]
159.360: [G1Ergonomics (Heap Sizing) did not expand the heap, reason: heap already fully expanded]
该问题似乎是 G1 特有的。在 Java 8 上使用默认的 gc 算法时,在抛出 OutOfMemoryException
之前,内存利用率会更加接近 -mx48G
阈值。
我使用以下参数-XX:+UseG1GC -mx48G
最佳答案
在 Java 11 中尝试了相同的用例。它几乎在同一时间耗尽了内存,但报告内存利用率为 98%。这是有道理的。
似乎 Java 8 错误地报告了内存利用率。
关于java - 当堆半满时出现 OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58173068/
我是一名优秀的程序员,十分优秀!