了解Hotspot JVM进程的内部碎片属性

问题描述 投票:15回答:1

对于堆上和堆外分配。堆上-在三个主要的垃圾收集器中:CMS,Parallel Old和G1。

到目前为止我所知道(或认为我知道):

  • 所有对象(堆上)分配被舍入为8字节边界(或更大的2的幂,由-XX:ObjectAlignmentInBytes配置。
  • G1
    • 对于小于区域大小的堆上分配(1到32 MB,可能约为[[堆大小 / 2048),没有内部碎片,因为不需要,因为分配器从不“填补漏洞”。
    • 对于更大的区域,分配会将其四舍五入为区域大小。即
    • 区域大小+ 1字节
    • 的分配非常不幸,它浪费了将近50%的内存。
  • 对于CMS,我发现的唯一相关信息是

    很自然的旧空间PLAB模仿索引的自由列表空间的结构。每个线程在257个堆字以下(从全局空间分配的大块)中预分配一定数量的每个大小的块。

    来自http://blog.ragozin.info/2011/11/java-gc-hotspots-cms-promotion-buffers.html。据我了解,提到的“全局空间”是主要的旧空间。

  • 问题:

      以上陈述正确吗?
    • CMS中主要旧空间的碎片属性是什么?超过“ 257个堆字”的分配又如何呢?
    • 如何使用Parallel Old GC管理旧空间?
    • Hotspot JVM是否将系统内存分配器用于堆外分配,还是使用特定的分配器对其进行重新管理?
    • UPD。讨论线程:https://groups.google.com/forum/#!topic/mechanical-sympathy/A-RImwuiFZE

    对于堆上和堆外分配。堆上-在三个主要的垃圾收集器中:CMS,Parallel Old和G1。到目前为止我所知道的(或认为我知道的):所有对象(on -...

    java memory-management jvm-hotspot memory-fragmentation heap-fragmentation
    1个回答
    5
    投票
      据我所知,以上陈述是正确的,尽管CMS上的位缺少很多上下文来解释它。
    © www.soinside.com 2019 - 2024. All rights reserved.