JVM
2023-01-15 17:48:46 0 举报
AI智能生成
jvn面试结构
作者其他创作
大纲/内容
适用于空间内存规整的情况,将使用的内存分配到一边,中间有一个分界指针,分配内存时将指针移动对应空间大小
指针碰撞
适用于空间不规整的情况,维护一个空闲空间的列表,分配时找一块足够大的分配出去并更新记录
空闲列表法
为对象分配内存
加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口。
加载
主要目的是为了确保Class字节码文件的字节流中包含的信息是否符合当前虚拟机的要求,并且不会危害虚拟机的自身安全。
验证
为类变量设置对应的初始化零值,如果是常量的话则直接赋值
准备
将符号引用变为直接引用
解析
连接
JVM层面执行完成后开始执行类的Java代码
初始化
类加载
更充分的利用CPU,多核环境下的硬件来缩短stop the world的停顿时间
并行与并发
G1不需要其他的垃圾回收器的配合就可以独自管理整个GC堆
分代收集
有利于程序长时间运行,分配大对象时不会无法得到连续的空间而提前触发GC
空间整合
让使用者明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒
可预测的非停顿
G1收集器
初始标记
并发标记
重新标记
并发清除
使用标记清除算法
CMS收集器
垃圾回收器
几乎所有对象都在此出生消亡,分为新生代和老年代,垃圾回收的主要区域
堆
存储类信息、静态变量、常量等,是反射获取类信息的入口
方法区
存储局部变量、操作数栈、动态链接、方法出口等
虚拟机栈
唯一不会报OOM的区域,负责程序的分支、循环、异常等流程操作,指向当前线程所执行的代码行,保留线程执行现场
程序计数器
与虚拟机栈几乎相同,不过存储的本地方法相关
本地方法栈
运行时数据区
每个对象一个引用计数器,当对象被引用时计数器加一,引用失效时计数器减一;此种方法不能解决循环引用问题
引用计数法
从GCRoots根节点出发,在引用链上的对象称为可达对象,不在引用链上的称为不可达对象;GCRoots包括虚拟机栈和本地方法栈的局部变量表中引用的对象、方法区中的静态属性及常量引用的对象
可达性分析
判断一个对象是否被回收
子主题
分为标记和清除两个步骤,清除未被标记的对象,可能会产生内存碎片问题,在给大对象分配连续内存时可能会提前触发full gc
标记清除算法
标记整理算法在标记清除算法的基础上做了一些优化,不像标记清除算法那样直接清除,而是将存活的对象压缩到内存的一端,之后将边界外的所有对象清除,这样既不会产生内存碎片问题也不会产生复制的额外开销,一般用在老年代
标记整理算法
分为标记和复制两部分,将内存分为两个区域,每次使用其中的一块区域,将区域中的存活对象复制到另外一块区域并清空之前的区域,交换两个区域的角色完成垃圾回收;虽说不会产生内存碎片,但是复制的开销成本比较大,而且还会造成内存浪费,目前主流的虚拟机都采用8:1:1的新生代空间分配方案,每次使用eden和一个survivor区,减少空间浪费
标记复制算法
垃圾回收算法
JVM
0 条评论
下一页