JVM
2020-07-30 10:53:03 1 举报
了解JVM
作者其他创作
大纲/内容
垃圾回收
引用计数法
仅有弱引用引用该对象时,在垃圾回收时,无论内存是否充足,都会回收弱引用对象
步骤①查找没有被根对象所直接引用的对象,并标记②清除标记的垃圾,清除是将对象所占用的内存地址的起始地址和结束地址放到一个空闲的地址列表,下一次有新对象的时候直接在空闲地址列表查找,然后把原来的数据进行覆盖优点速度比较快缺点会导致内存碎片,到进行清除之后不会对内存进行整理。导致一个较大的对象存不下。
运行时常量池:类基本信息、常量池常量池相关面试题
虚引用
四种引用
仅有软引用引用该对象时,在垃圾回收后,内存仍不足时会再触发发垃圾回收,回收软引用对象
软引用
①通过new关键字创建的对象都会在堆内存中②是线程共享的,需要考虑线程安全问题③存在垃圾回收的机制
必须配合引用队列使用
首先确定一系列的根对象(不能被虚拟机所回收的对象)在垃圾回收之前,会对堆内存中所有的对象进行扫描,看其是否被根对象直接或间接的引用,如果被引用了说明这个对象不能被垃圾回收。
标记清除算法
程序计数器
每个线程运行所需要的内存,每个虚拟机栈中存在着栈祯对应着每次方法调用所占的内存。虚拟机栈的大小影响着方法递归调用的次数。
步骤①首先划分出两块内存大小相同的区域(From和To)②然后进行标记③将From区域中存活的对象复制到To区域中,再复制的过程中完成整理④复制完成后清空From区域的垃圾⑤交换From区域和To区域的位置优点没有内存碎片的产生缺点占用了双倍的空间
弱引用
java虚拟机线程共享的区域①存储了和类结构相关的信息②类的成员变量、构造方法和成员方法
平时用的所有引用只要沿着GC Root能够找到就说明不能被回收掉
JVM内存结构
可达性分析算法
记住下一条指令的执行地址。线程私有,不存在内存溢出。
方法区是堆的组成部分
分代垃圾回收
顾名思义:只要一个对象被其他变量所引用,就让这个对象计数加一。如果不再引用这个对象的话,就让这个对象的计数减一。等这个计数为空的时候,就说明可以进行回收了。弊端:存在循环引用的问题,将导致对象无法被回收。
描述各个区域的作用描述分代垃圾回收的过程
包含
方法区
垃圾回收器
复制
虚拟机栈
标记整理算法
步骤①还是想要进行标记②清除后会对内存进行整理,不会出现内存碎片优点解决了标记清除导致内存碎片的缺点缺点对象需要移动,移动后内存地址发生改变,引用对象的变量也得跟着改变,造成时间比较慢。
堆
Java调用本地方法所用的空间。本地方法是指操作系统所提供的的api,在java中用native关键字所标识的方法都为本地方法栈。
强引用
判断对象是否可以被回收
本地方法栈
JVM
垃圾回收算法
0 条评论
回复 删除
下一页