码迷,mamicode.com
首页 > 其他好文 > 详细

GC 简介

时间:2015-05-04 08:43:57      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:垃圾回收器   gc   jvm   

Stop-the-world

意味着 JVM 因为要执行GC而停止了应用程序的执行。当Stop-the-world发生时,除了GC所需的线程以外,所有线程都处于等待状态,直到GC任务完成。GC优化很多时候就是指减少Stop-the-world发生的时间。

GC创建

垃圾回收器会在下面两种前提假设(hypotheses)成立的情况下被创建:

  • 大多数对象会很快变得不可达
  • 只有很少的由老对象(创建时间较长的对象)指向新生对象的引用

young generation&old generation

HotSpot虚拟机将其物理上划分为两个–新生代(young generation)和老年代(old generation)

新生代(Young generation)

: 绝大多数最新被创建的对象会被分配到这里,由于大部分对象在创建后会很快变得不可到达,所以很多对象被创建在新生代,然后消失。对象从这个区域消失的过程我们称之为”minor GC

老年代(Old generation)

: 对象没有变得不可达,并且从新生代中存活下来,会被拷贝到这里。其所占用的空间要比新生代多。也正由于其相对较大的空间,发生在老年代上的GC要比新生代少得多。对象从老年代中消失的过程,我们称之为”major GC“(或者”full GC“)

技术分享

持久代( permanent generation ):

也被称为方法区(method area)。他用来保存类常量以及字符串常量。因此,这个区域是用来永久的存储那些从老年代存活下来的对象。这个区域也可能发生GC。并且发生在这个区域上的GC事件也会被算为”major GC“(或者”full GC“)

新生代构成

新生代是用来保存那些第一次被创建的对象,他可以被分为三个空间

  1. 一个伊甸园空间(Eden )
  2. 一个幸存者空间(Survivor0 )

每个空间的执行顺序如下:

  1. 绝大多数刚刚被创建的对象会存放在伊甸园空间。 在伊甸园空间执行了第一次GC之后,存活的对象被移动到其中一个幸存者空间。
  2. 此后,在伊甸园空间执行GC之后,存活的对象会被堆积在同一个幸存者空间。
  3. 当一个幸存者空间饱和,还在存活的对象会被移动到另一个幸存者空间。之后会清空已经饱和的那个幸存者空间。
    在以上的步骤中重复几次依然存活的对象,就会被移动到老年代

在对象刚刚被创建之后,是保存在伊甸园空间的。那些长期存活的对象会经由幸存者空间转存在老年代空间
技术分享

老年代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

什么是GC监控?

垃圾回收收集监控指的是搞清楚JVM如何执行GC的过程,例如,可以查明:
1. 何时一个新生代中的对象被移动到老年代时,所花费的时间。
2. Stop-the-world 何时发生的,持续了多长时间。
GC监控是为了鉴别JVM是否在高效地执行GC,以及是否有必要进行额外的性能调优。基于以上信息,我们可以修改应用程序或者调整GC算法(GC优化)

jstat -gcutil PID

被用于检查堆间的使用情况,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/

GC 简介

标签:垃圾回收器   gc   jvm   

原文地址:http://blog.csdn.net/lemon89/article/details/45462229

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!