当前位置:网站首页>JVM面试题总结(持续更新中)
JVM面试题总结(持续更新中)
2022-08-01 00:16:00 【三月不灭】
JVM内存划分
Java堆: 存储对象实例。 分为新生代(伊甸园区,幸存者1区,幸存者2区)老年代
方法区: 其具体实现是元空间,存储运行时常量池,被虚拟机加载的类信息,常量等。
虚拟机栈:执行Java方法提供服务的,存放方法运行时所需数据,字符串常量池,静态变量
本地方法栈: 为执行本地方法提供服务的
程序计数器: 存储下一条指令的地址,由执行引擎读取下一条指令
类加载过程
1)加载 :将类对应的二进制文件加载到内存后,类的元信息,运行时数据存放在方法区,并在堆中生成这个类的Class对象作为方法区这个类的各种数据的访问入口
2)链接:先验证class文件的正确性,接着给类变量分配内存并设置默认初始值,然后将常量池内的符号引用转换为直接引用
3)初始化 :javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并成clinit()方法,然后执行给类变量做显示初始化。
若该类具有父类,JVM会保证子类的clinit()执行前,父类的clinit()已经执行完毕。 虚拟机必须保证一个类的clinit()方法在多线程下被同步加锁。
类加载器有哪些?
- 虚拟机自带的加载器
- 启动类加载器:C/C++实现,加载java核心类库(eg:String),不继承ClassLoader类,无父加载器,其加载扩展类和应用程序类的加载器(加载器也是类,需要用父加载器加载子加载器)
- 扩展类加载器:java编写,派生于ClassLoader类,父类加载器–>引导类加载器,加载jre/lib/ext子目录(若用户创建的jar也在此目录下,则由扩展类加载器加载)
- 系统类加载器:java编写,派生于ClassLoader类,父类加载器–>引导类加载器,用户自定义的类默认用系统类加载器加载
- 自定义加载器
双亲委派机制
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,如果这个父类加载器还有父类加载器,则继续向上委派,最终到达顶层启动类加载器,然后又往下搜索,当对应的加载器可以完成加载请求时则会去加载
优势:
避免类的重复加载:父类加载器加载了,子类就不用加载了
保护程序安全,防止核心API被随意篡改(如自定义类:Java.lang.String加载的依然是核心api下的String)
如何判断某个对象是垃圾
可达性分析算法:
- JVM 中的垃圾回收器通过可达性分析来探索所有存活的对象
- 扫描堆中的对象,会从GC Root的根节点开始扫描,查看是否存在一个引用链指向该对象,如果找不到,则表示可以回收
可以作为GC Root 的对象
- 虚拟机栈(栈帧中的本地变量表)中引用的对象(局部变量)。
- 堆中类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中 JNI(即一般说的Native方法)引用的对象
垃圾收集算法有哪些?
1)标记清除算法:通过GC可达性分析算法,从根节点开始标记所有可达对象,未被标记的则视为垃圾对象,标记完成清除所有未被标记对象。可能会产生大量碎片
2)复制算法:将原有的内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,然后清除正在使用的内存块中的所有对象。
3)标记-整理:通过GC可达性分析算法,从根节点开始标记所有可达对象。将所有的存活对象压缩到内存的一段,之后清理边界所有的空间
垃圾回收器
垃圾回收器主要分为以下几种:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1;
Serial: 单线程的收集器,使用复制算法。在进行垃圾回收时,需要暂停所有正在执行的线程(stop the world)
ParNew: Serial收集器的多线程版本,也需要stop the world,复制算法
Parallel Scavenge: 并发的多线程收集器,采用复制算法,目标是达到一个可控的吞吐量,虚拟机会根据系统的运行状态收集性能监控信息,动态设置这些参数,以提供最优停顿时间和最高的吞吐量;
Serial Old: Serial收集器的老年代版本,单线程收集器,使用标记整理算法。
Parallel Old: 是Parallel Scavenge收集器的老年代版本,使用多线程,标记-整理算法。
CMS: 是一种以获得最短回收停顿时间为目标的收集器,标记清除算法,运作过程:初始标记,并发标记,重新标记,并发清除,收集结束会产生大量空间碎片;
G1: 标记整理算法实现,运作流程主要包括以下:初始标记,并发标记,最终标记,筛选回收。不会产生空间碎片,可以精确地控制停顿;G1将整个堆分为大小相等的多个Region(区域),G1跟踪每个区域的垃圾大小,在后台维护一个优先级列表,每次根据允许的收集时间,优先回收价值最大的区域,已达到在有限时间内获取尽可能高的回收效率;
分代垃圾回收过程
由于大部分对象都是朝生夕死的,少数的对象存活的对象比较长,所以对象的回收是分代进行的
新创建的对象首先分配在 Eeden 区
新生代空间不足时,触发Minor GC ,eden 区 和 from 区存活的对象使用 - copy 复制算法到 to 中,存活的对象年龄加1,然后交换 from to 的位置,空出大量连续内存区,放对象,空间不足又执行Minor GC,如此反复。
minor gc 会引发 stop the world(SWT),暂停其他线程(垃圾回收时会涉及大量关于对象的复制,其他线程会产生不必要的麻烦,如线程不到对象了,因为地址变化了),等垃圾回收结束后,恢复用户线程运行 当幸存区对象的寿命超过阈值时,最大的寿命默认是 15(4bit)----多次回收还存在,说明价值较高,放入老年代,不用频繁回收。会晋升到老年代。或者幸存者区中相同年龄的对象占幸存者区大小一半,或有个超大对象,新生代无法装下,都会晋升到老年代。
当老年代空间不足时,会先触发 minor gc,如果空间仍然不足,那么就触发 full fc ,STW停止的时间更长!
Student student = new Student();在内存中做了哪些事情?【创建对象的步骤】
加载Student.class文件进内存(加载、链接、初始化)
在栈内存中为变量s开辟空间
在堆内存为Student对象开辟空间
对学生对象的成员变量进行默认初始化
设置对象的对象头
对学生对象的成员变量进行显示初始化
通过构造方法对学生对象的成员变量赋值
Student对象初始化完毕,把对象地址赋值给s变量
对象的内存布局
边栏推荐
猜你喜欢
Introduction to the five data types of Redis
Google Earth Engine——Error: Image.clipToBoundsAndScale, argument ‘input‘: Invalid type的错误解决
Google "Cloud Developer Quick Checklist"; Tsinghua 3D Human Body Dataset; SenseTime "Universal Vision Framework" open class; Web3 Minimalist Getting Started Guide; Free Books for Efficient Deep Learni
cobaltstrike
消息队列存储消息数据的MySQL表格
Notes on how to use zeno
[1161. The maximum sum of elements in the layer]
Handwritten a simple web server (B/S architecture)
清华大学陈建宇教授团队 | 基于接触丰富机器人操作的接触安全强化学习框架
类和对象:上
随机推荐
【1161. 最大层内元素和】
基于simulink的Passive anti-islanding-UVP/OVP and UFP/OFP被动反孤岛模型仿真
考研备考方案
什么是动态规划,什么是背包问题
Weekly Summary
SQL injection Less42 (POST type stack injection)
[AMEX] LGBM Optuna美国运通信用卡欺诈赛 kaggle
Rainbow share | how to use moving targets defense technology to guard against the unknown
Web3.0:构建 NFT 市场(一)
Matlab / Arcgis处理nc数据
Advanced Algebra _ Proof _ Any matrix is similar to an upper triangular matrix
Google "Cloud Developer Quick Checklist"; Tsinghua 3D Human Body Dataset; SenseTime "Universal Vision Framework" open class; Web3 Minimalist Getting Started Guide; Free Books for Efficient Deep Learni
IPD流程专业术语
Flink 1.13(八)CDC
虚继承的原理
【读书笔记->数据分析】02 数据分析准备
博弈论(Depu)与孙子兵法(42/100)
Network security - crack WiFi through handshake packets (detailed tutorial)
In 2022, the latest eight Chongqing construction members (electrical construction workers) simulation question bank and answers
How to Design High Availability and High Performance Middleware - Homework