文章目录
GC
聊聊java中的GC操作
作者:wind blog
GC主要思路分为三步:
1、Marking(标记);
2、Normal Deletion(清除标记的对象);
3、Deletion with Compacting(压缩清除)。
GC root
GC标记主要采用GC root的算法,选定一些对象作为GC roots,以这些对象为起点,搜索所走过的引用链,不可达的对象标记为待清除的对象。可以作为GC root的对象:JVM栈中所引用的对象、方法区中,静态属性引用的对象、方法区中,常量引用的对象、本地方法栈中,JNI(即Native方法)引用的对象。
分代与GC机制
java堆内存被分为三种:新生代:Eden,From Survivor,To Survivor,比例8:1:1、老年代、永久代。
新生代
新产生的对象全都放在Eden区,当Eden区满时,将触发一次minor garbage collections。这是一个stop the world事件。触发minor GC后,还被引用的对象会被放入From Survivor区,没有被引用的对象被清除。再触发一次GC后,From Survivor和Eden区的被引用的对象会全部被放入To Survivor区中。无限循环以上步骤,新生代中存货年龄大于门限的会被放入老年代中。
GC复制算法(标记-复制算法)
新生代管理内存的算法。将内存分为两个空间,一个From,一个To。From分配,To空闲。GC时把存活的对象复制粘贴进To,然后将To变成新的From,原来的From变成To。
老年代
老年代的GC是major garbage collections,也叫full GC,当老年代内存不够时就会触发,包括对新生代和老年代所有对象的回收。采用标记-压缩清除算法。
GC收集器
Serial
采用标记-复制算法,单线程,GC时程序会进入长时间的暂停状态,不建议使用。
Parallel
也使用标记-复制算法,并行使用多线程去GC,吞吐量优先。
CMS(ConcurrentMarkSweep)
标记-清除算法。在minor gc时会暂停程序,采用多线程进行gc。full gc不暂停应用线程,采用多个后台线程对老年代空间进行扫描,及时回收不再使用的对象。
G1(GarbageFirst)
为了降低full gc次数,同时采用标记-压缩算法降低内存碎片。
SQL JOIN
图解JOIN
作者:CodingStar
操作系统交互
Java与操作系统交互细节
作者:董鹏dp
还未看完,明天总结在day 4中。