Spark笔记-001-GC

我真的不懂Java...

GC急速入门

  • Java对象在内存中的结构

  • 如何确定对象可以被回收

    • java通过引用访问堆中对象
    • 通过根节点可达性分析确定可以被回收。本地变量表引用的对象,方法区静态属性引用的对象,常量引用的对象,本地方法栈中JNI引用的对象,可以作为根节点。
  • 如何进行垃圾回收

    • Mark-Sweep
    • Copying
    • Mark-Compact
    • 分代
  • 分代
    分为新生代,老年代,永久代。
    新对象分在Eden和Survivor1,如果空间不足,发生MinorGC,将Eden,Survivor1中存活的对象移动到Survivor2中,将Eden,Survivor1中对象清理掉。如果Survivor2中也不够,那么放到老年代。接下来对象分配到Eden和Survivor2中,也就是说Survivor1和2角色互换了。

public class GCTest {
    public static void test(){![spark-jvm.png](https://upload-images.jianshu.io/upload_images/12606989-84091793beb64f11.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

        String s = new String("abc");
    }
    public static void main(String[] args){
        while(true){
            test();
        }
    }
}  
  • 看一眼


    YoungGen.png

    这里面Eden Space转折处发生Miner GC, 存活对象被放入Survivor1,可以看出上次存活对象是放入Survivor2的,这两个空间使用是交替的。

Spark内存与JVM关系

写不动了先盗个图以后补,困了。


spark-jvm.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容