美文网首页
java虚拟机的工作原理

java虚拟机的工作原理

作者: QiangZeng | 来源:发表于2017-09-28 09:30 被阅读0次
    1. JVM 内存结构


      Hotspot Achitecture.png

      需要用来调优的主要就是堆和垃圾回收器,基于两个方面调优,一个是Responsiveness, 一个是Throughput(例如一次做多执行多少次transaction)

    2. 自动垃圾回收
      第一步标记已经使用过的内存


      Marking.png

      第二步删除unreferenced objects

    Slide1b.png

    第三步压缩

    Slide4.png

    上述方法效率不高,原因就是随着越来越多的Object 被分配,导致越来越长时间的垃圾回收,实际情况是很多被分配的Object存在的时间很短。如下图

    ObjectLifetime.png

    3.JVM Generations
    堆被分布三个部分: Young Generation, Old or Tenured Generation, and Permanent Generation

    JVM Generations.png

    Young Generation是新分配的objects被分配的地方。当它满了会产生一个
    minor garbage collection。根据object存在时间少的特性,回收效率很高。同时minor garbage collection 会产生一个Stop the World Event,所有的应用线程都会停止,直至这个Event结束。
    Old Generation 是用来存储活的长的Object的地方。阈值就是当Young Generation内某些达到一定的存活年龄。最终Old Generation也要被回收,这个回收事件就叫major garbage collection,它也是一个Stop the World Event,但是会很慢,因为涉及到所有的活的objects。
    Permanent generation 包含一些Metadata,它产生于JVM的runtime。

    1. Generational Garbage Collection Process
      Object首先被分配到Eden, 两个survior space 都是空的。


      Slide13.png

    当eden space 满了产生一个minor garbage collection


    Slide14.png

    回收过程,Referenced objects移到第一个survivor space。其他的删除


    Slide6.png

    下一个minor garbage collection 的时候如下发生Unreferenced objects 被删,referenced objects移到第二个survivor space,同时第一个survivor space内存活的Object年龄会加一,S0 和 eden被清空

    Slide8.png

    再到达下一次minor garbage collection

    Slide9.png

    当年龄达到一定程度,一些objects就会移到old generation,产生一个promotion

    Slide7.png

    随着minor GCs继续,更多的objects就会移到old generation


    Slide10.png

    最后就会产生major GC回收old generation

    参考文献
    http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

    相关文章

      网友评论

          本文标题:java虚拟机的工作原理

          本文链接:https://www.haomeiwen.com/subject/sekmextx.html