- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 29G 的堆转储,它是在 OutOfMemoryError
发生后由 Hotspot VM 创建的。堆分析器(我使用 YourKit)显示所有对象(包括不可达)占用 26G。我的猜测是剩余的 3G 被浪费了,因为堆是碎片化的。有没有办法验证这个理论?
最佳答案
这与堆碎片无关。
大小的差异由堆转储格式解释。请注意,堆转储不是堆的原始内容 - 它是 HPROF 中内容的序列化表示。格式。
因此,每个对象实例都由具有以下结构的 HPROF_GC_INSTANCE_DUMP
记录表示:
u1 record tag
u8 object ID
u4 stack trace serial number
u8 class ID
u4 number of bytes that follow
u1* <field data>
考虑 java.lang.Integer
的一个实例。在 64 位压缩 OOPs HotSpot JVM 中,一个 Integer
的实例需要 16 个字节:8 个字节的 header + 4 个字节的类指针 + 4 个字节的 value
字段。同一个实例在堆转储中将占用 29 个字节,从而产生 81.25% 的巨大开销。
当然,典型 Java 应用程序中的堆通常充满了更大的对象,即数组。这就是为什么 HPROF 记录 header 的平均开销看起来更小,大约为 10%,就像您的情况一样。
关于java - 如何检查java堆是否碎片化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56905030/
当使用 FFmpeg 控制台将 RTSP 流保存到分段 MP4 文件时,我注意到存在少量内存泄漏。 它每小时泄漏大约 3-4 MB(当每帧是一个片段和 30 fps 时)。 使用了以下命令: ffmp
我尝试了文档 http://doc.scrapy.org/en/stable/topics/practices.html 中的示例,但第二次运行时会出现错误ReactorNotRestartable。
I published my application to the Play Store as open beta. I don't get any error when I run it wi
我是一名优秀的程序员,十分优秀!