课程名称:Java生产环境下性能监控与调优详解
课程章节:第七章
主讲老师:若鱼1919
课程内容:
根节点:类加载器,Thread,虚拟机栈的本地变量表,static成员,常量引用,本地方法栈等
方法:
对象分配:
对象又现在Eden区分配
大对象直接进入老年代,-XX:PretenureSizeThreshold,超过这个设定的值,直接进入老年代
Young区采用复制算法(大部分对象都在young区分配的,可用对象其实不多)
Old区采用标记清除或者标记整理算法(Old区声明周期长,其实没有多少垃圾)
标记清除:分标记和清除两个阶段,先标记,后清除,效率低,而且会产生碎片(因为物理上不是连续的),碎片太多会导致提前GC
复制:按照容量分成大小两块,每次使用其中一块,当 这块内存用完之后,将这块内存存活的对象放到另外一块上面,而后把第一次使用内存清空。但是,这种方法虽然简单,容易实现,但是空间利用率低,
标记整理:标记仍和标记清除的做法一样,但是后续步骤不是清理对象,而是让所有存活的对象向一端移动,然后清楚掉边界以外的内存,这样可以避免产生内存碎片,但是整理的过程非常耗费时间。
分代垃圾回收
课程收获:
今天学习了GC垃圾回收机制,GC回收大概分三种,标记清除,整理,复制算法,和其工作原理,我有时间查查使用场景,还有就是如何进行迭代的。
加油加油,继续努力。