『Java』Java JVM常见面试题:JVM调优案例( 三 )


  • 分析:ParNew收集器使用的是复制算法 , 这个算法的高效是建立在大部分对象都是存活时间很短的情况下 , 如果存活对象过多 , 把这些对象复制到Survivor并维持这些对象引用 , 导致垃圾收集的暂停时间明显变长 。
  • 总结:
      • GC调优:可以考虑直接将Survivor空间去掉(-XX:SurvivorRatio=65536、-XX:MaxTenuringThreshold=0) , 直接进入老年代 , 等到Major GC时区清理 。
      • 修改数据结构
      • HashMap<Long , Long>的空间效率:
        • HashMap<Long , Long>结构 , Key和Value所存放的两个长整型数据是有效数据 , 共16字节 。
        • 用Long对象包装之后:
          • Long对象的空间 , 8字节的Mark Word、8字节的Klass指针 , 再加8字节存储数据的long值 , 共24字节 。
          • 2个Long对象组成Map.Entry之后 , 又多了16字节的对象头 , 然后一个8字节的next字段和4字节的int型的hash字段 , 为了对齐 , 还必须添加4字节的空白填充
          • HashMap中对这个Entry的8字节的引用
        • 【『Java』Java JVM常见面试题:JVM调优案例】结论:空间效率 , 16字节/88字节=18% 。


    推荐阅读