Sun JDK V1.6.0 JVM GC

本PPT目前版本仅为0.8,后续仍然会进一步完善,只介绍了在Sun Hotspot V 1.6.0中:
1、内存结构;
2、内存分代,如何控制代大小;
3、可用的GC,每种GC对于参数的不同使用,例如SurvivorRatio、MaxTenuringThreshold等;每种GC不同的内存分配策略和回收策略,但不涉及具体算法是如何实现的;
4、GC是怎么触发的,日志是什么含义;
5、怎么使用上面的GC;
6、GC Tuning,一个案例以及简单介绍了一些常见的GC调优的目标时的瓶颈、可采用的方法等;
7、Sun JDK是如何实现GC的。

本PPT目前版本仅为0.8(更新于2010-06-08),后续仍然会进一步完善,只介绍了在Sun Hotspot V 1.6.0中:
1、内存结构;
2、内存分代,如何控制代大小;
3、可用的GC,每种GC对于参数的不同使用,例如SurvivorRatio、MaxTenuringThreshold等;每种GC不同的内存分配策略和回收策略,但不涉及具体算法是如何实现的;
4、GC是怎么触发的,日志是什么含义;
5、怎么使用上面的GC;
6、GC Tuning,一个案例以及简单介绍了一些常见的GC调优的目标时的瓶颈、可采用的方法等;
7、Sun JDK是如何实现GC的。

《Sun JDK V1.6.0 JVM GC》有17个想法

  1. @Bluedavy,有些GC的问题想请教一下:

    1.在heap dump中有没有办法分析出object是在young generation还是在old generation中呢?

    2.据说在做heap dump的时候会触发一次Full GC,但是为什么我发现dump出来的heap中还是有些对象的引用为路径不可达,实际上这些对象应该是没有被引用的,应该在dump前会回收呀?

  2. @Oscar
    1、没有办法;
    2、dump前确实会触发一次full gc,同时也可以dump出那些已经dead的对象,这是为了方便你查看dead的对象的状况,但同时由于这些对象已经没有引用关系了,所以参考意义不大。

  3. @bluedavy

    1. 又想了一下这个问题,每个对象都有一个指针地址,而且young generation,old generation是一块连续的heap区间,通过对象的指针地址是否可以看的出来是否在哪个代中呢?如果是这样,从young generation到old generation提升的时候,对象指针难道会发生变化吗? 实际上是不会更改的,JVM怎么处理的呢?

  4. @Oscar
    没错,对象从eden到to或到old,或old做compact的时候由于位置变了,因此指针是需要更新的,这也是为什么gc的时候要暂停应用的原因之一。
    ps: hotspot内部确实可以知道对象是在哪个代中的。

  5. 对于对象来说没有引用,会回收内存。

    当Full GC时,如何判断 持久代中什么需要回收?

  6. @snskid
    …这个还真没看过,不确定,理论上持久代的东西应该其实也是有引用关系的..例如持久代中放了class的信息,如果class所在的classloader已经可以被回收了,那么自然这些class的信息也跟着就可以被回收了。

  7. 请教一下:jstat中
    YGC Number of young generation GC Events.
    YGCT Young generation garbage collection time.
    FGC Number of full GC events.
    FGCT Full garbage collection time.

    这里所指的events是什么?
    collection time 是指应用启动一直到 jstat之间 所有的回收所用时间的总和?

  8. 已经找到答案 从到采样时间为止的所有GC事件总和。B4自己没有好好G一下。

  9. 请问 bluedavy 我想系统的学习一下关于jvm gc的相关知识,你当时是从哪找的这些相关的资料呢,我在网上找过,很少。

  10. 靠,昨天看到一半的PPT。今天slideshare访问不了了。能否把这几个PPT发到我的邮箱啊。感谢。

发表评论

电子邮件地址不会被公开。 必填项已用*标注


*