内存分配

1. 栈区:栈可分为Java虚拟机和本地方法栈

2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更新一点年轻代可分为Eden区,主要放新创建对象,From survivor 和 To survivor 保存 gc 后幸存下的对象,默认情况下各自占比 8:1:1。

3. 方法区:被所有线程共享,用于存放已被虚拟机加载的信息,常量,静态变量等,是Java虚拟机描述为堆的一个逻辑部分。习惯被称为永久代。

4. 程序计数器:是当前线程所执行的行号指示器,跳转指令等都依赖这个完成,线程私有。

回收策略以及Minor GC 和 Major GC(Full GC)

1. 对象优先在堆区的Eden区分配。

2. 大对象直接进入老年代。

3. 长期存活的对象直接进入老年代。

回收:当Eden区没有足够的空间分配时,虚拟机会执行一次Minor GC .Minor GC通常发生在Eden新生代,因为这个区的对象生存期短,发生频率高,回收速度快。Major GC发生在老年代,一般触发老年代的GC不会触发Minor GC ,但是通过配置,可以在之前进行一次Minor GC,能加快老年代的回收速度

09-20 09:05