意味着 JVM 因为要执行GC而停止了应用程序的执行。当Stop-the-world发生时,除了GC所需的线程以外,所有线程都处于等待状态,直到GC任务完成。GC优化很多时候就是指减少Stop-the-world发生的时间。
垃圾回收器会在下面两种前提假设(hypotheses)成立的情况下被创建:
HotSpot虚拟机将其物理上划分为两个–新生代(young generation)和老年代(old generation)
: 绝大多数最新被创建的对象会被分配到这里,由于大部分对象在创建后会很快变得不可到达,所以很多对象被创建在新生代,然后消失。对象从这个区域消失的过程我们称之为”minor GC“
: 对象没有变得不可达,并且从新生代中存活下来,会被拷贝到这里。其所占用的空间要比新生代多。也正由于其相对较大的空间,发生在老年代上的GC要比新生代少得多。对象从老年代中消失的过程,我们称之为”major GC“(或者”full GC“)
也被称为方法区(method area)。他用来保存类常量以及字符串常量。因此,这个区域是用来永久的存储那些从老年代存活下来的对象。这个区域也可能发生GC。并且发生在这个区域上的GC事件也会被算为”major GC“(或者”full GC“)。
新生代是用来保存那些第一次被创建的对象,他可以被分为三个空间
每个空间的执行顺序如下:
在对象刚刚被创建之后,是保存在伊甸园空间的。那些长期存活的对象会经由幸存者空间转存在老年代空间
老年代空间的GC事件基本上是在空间已满时发生,执行的过程根据GC类型不同而不同
JDK7一共有5种GC类型:
Serial GC
Parallel GC
Parallel Old GC (Parallel Compacting GC)
Concurrent Mark & Sweep GC (or “CMS”)
Garbage First (G1) GC
垃圾回收收集监控指的是搞清楚JVM如何执行GC的过程,例如,可以查明:
1. 何时一个新生代中的对象被移动到老年代时,所花费的时间。
2. Stop-the-world 何时发生的,持续了多长时间。
GC监控是为了鉴别JVM是否在高效地执行GC,以及是否有必要进行额外的性能调优。基于以上信息,我们可以修改应用程序或者调整GC算法(GC优化)
被用于检查堆间的使用情况,GC执行的次数以及GC操作所花费的时间。
如果GC执行满足了以下要求,GC并不需要优化:
Minor GC 执行快 (50 ms内).
Minor GC 执行不频繁 (大概10s 执行一次).
Full GC 执行快 (1 second内).
Full GC 执行不频繁 (10 minutes 一次).
参考原文地址:
http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html
http://www.cubrid.org/blog/dev-platform/how-to-tune-java-garbage-collection/
http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/
原文地址:http://blog.csdn.net/lemon89/article/details/45462229