我真的不懂Java...
GC急速入门
- Java对象在内存中的结构 
- 
如何确定对象可以被回收 - java通过引用访问堆中对象
- 通过根节点可达性分析确定可以被回收。本地变量表引用的对象,方法区静态属性引用的对象,常量引用的对象,本地方法栈中JNI引用的对象,可以作为根节点。
 
- 
如何进行垃圾回收 - Mark-Sweep
- Copying
- Mark-Compact
- 分代
 
- 
分代 
 分为新生代,老年代,永久代。
 新对象分在Eden和Survivor1,如果空间不足,发生MinorGC,将Eden,Survivor1中存活的对象移动到Survivor2中,将Eden,Survivor1中对象清理掉。如果Survivor2中也不够,那么放到老年代。接下来对象分配到Eden和Survivor2中,也就是说Survivor1和2角色互换了。- 装个Visual GC看一眼,安装指南指路https://www.cnblogs.com/linghu-java/p/5689227.html
- 写个只分配对象的死循环
 
 
- 装个Visual GC看一眼,安装指南指路https://www.cnblogs.com/linghu-java/p/5689227.html
public class GCTest {
    public static void test(){
        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
