java虚拟机的工作原理

  1. JVM 内存结构


    java虚拟机的工作原理_第1张图片
    Hotspot Achitecture.png

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

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


    java虚拟机的工作原理_第2张图片
    Marking.png

    第二步删除unreferenced objects

java虚拟机的工作原理_第3张图片
Slide1b.png

第三步压缩

java虚拟机的工作原理_第4张图片
Slide4.png

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

java虚拟机的工作原理_第5张图片
ObjectLifetime.png

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

java虚拟机的工作原理_第6张图片
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 都是空的。


    java虚拟机的工作原理_第7张图片
    Slide13.png

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


java虚拟机的工作原理_第8张图片
Slide14.png

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


java虚拟机的工作原理_第9张图片
Slide6.png

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

java虚拟机的工作原理_第10张图片
Slide8.png

再到达下一次minor garbage collection

java虚拟机的工作原理_第11张图片
Slide9.png

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

java虚拟机的工作原理_第12张图片
Slide7.png

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


java虚拟机的工作原理_第13张图片
Slide10.png

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

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

你可能感兴趣的:(java虚拟机的工作原理)