1.JVM基本结构
- 类加载子系统:加载类的信息
- 方法区:存放类加载信息及常量池信息
- Java堆:存放所有的实例对象
- 直接内存:直接向系统申请内存空间,读写频繁场合使用
- 垃圾回收系统:未引用对象的回收
- Java栈:每个线程有私属的Java栈,栈中保存着局部变量方法参数
- 本地方法栈:本地方法调用
- PC寄存器:指向当前正在被执行的指令
- 执行引擎:负责执行虚拟机的字节码
2.垃圾回收常用算法
- 引用计数 :对象有一引用,即增加一个计数,删除一个引用则减少一个计数。但其无法处理循环引用的问题。
- 复制算法:把内存空间划分为两个相等的区域,每次只使用一个区域,垃圾回收时会依次将对象复制到另一区域
- 标志清除:分为两阶段,第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除,但此算法会暂停整个应用且会产生内存碎片。
- 标记整理算法:结合了标志清除和复制算法的优点,也分为两阶段,第一阶段从根节点开始标记所有被引用的对象,第二阶段遍历整个堆,清除未标志对象且把存活对象压缩到堆的其中一块,按顺序排放