类加载过程
当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤,所以有时也把这个3个步骤统称为类加载或类初始化。
JVM虚拟机执行class字节码的过程可以分为7个阶段:加载、验证、准备、解析、初始化、使用、卸载
(没事多看书,多总结,多动手。)
GC:哪些内存需要回收?什么时候回收?如何回收?
当需要排查各种内存溢出、内存泄露问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,就需要对内存动态分配和垃圾收集技术实施必要的监控和调节。
垃圾收集器关注的是Java堆和方法区中的动态分配和回收的内存。
判断对象存活与否?
1、引用计数算法:主流的Java虚拟机未采用,很难解决对象之间相互循环引用的问题
2、可达性分析算法:判定对象是否可回收
对象真正死亡:至少经历两次标记过程:finalize()最多执行一次
分为标记和清除两个阶段,是最基础的收集算法,主要不足:1、效率问题;2、空间问题:标记清除之后会产生大量不连续的内存碎片,导致之后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次GC。