文章目录
-
- 1.请简单描述下 JVM 运行时数据区包括哪些部分?
- 2.JVM 中是怎么判断对象可回收的?
- 3.方法区主要存储什么信息?
- 4.请简单描述下 JVM 出现的几种异常?
- 5.在默认参数下,如果 Eden 区的大小为 80M,求堆空间总大小?
- 6.什么是程序计数器?为什么 JVM 需要它?
- 7.请描述下 JVM 中对象创建需要的几个步骤?
- 8.JVM 对象的访问定位有哪两种?HostSpot 版本中用哪种?
- 9.JVM 中存在哪些引用?
- 10.JVM 中垃圾收集有哪些算法,各自的特点?
- 11.HotSpot 中的堆为什么要分为新生代和老年代?
- 12.JVM 中哪几种情况需要对类进行初始化?
- 13.请简单描述下双亲委派模型?
- 14. CMS 收集器有哪些特点?
- 15.G1 收集器有哪些特点?
- 16、JVM 类加载机制有哪几步,分别每一步做了什么工作?
|
|
1.请简单描述下 JVM 运行时数据区包括哪些部分?
答:
JVM 在执行 Java 程序的过程中会把它管理的内存分为若干个不同的区域,这些组成部分有些是线程私有的,有些则是线程共享的
线程私有的:程序计数器,虚拟机栈,本地方法栈
线程共享的:方法区,堆
思维导图
2.JVM 中是怎么判断对象可回收的?
答:
可达性分析算法
这个算法的基本思想就是通过一系列的称为 “GC Roots”的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots没有任何引用链相连的话,则证明此对象是不可用的,可以被回收的。
思维导图
3.方法区主要存储什么信息?
答:
方法区是所有线程共享。主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分,但是为了与堆进行区分,通常又叫“非堆”。
4.请简单描述下 JVM 出现的几种异常?
答:
主要是两种:StackOverFlowError 和 OutOfMemoryError.StackOverFlowError:
当线程请求栈的深度超过当前 Java 虚拟机栈的最大深度的时候,就抛出
StackOverFlowError 异常。
OutOfMemoryError:
- 当线程请求栈时内存用完了,无法再动态扩展了,此时抛出 OutOfMemoryError 异
常。 - 堆内存或者永久代代/元空间不够,无法在分配对象或存放数据,同时堆空间或者
永久代/元空间无法再拓展,,此时抛出 OutOfMemoryError 异常。 - 垃圾回收器占用 JVM 中 98%的资源,同时回收效率不到 2%,JVM 会抛出
OutOfMemory
5.在默认参数下,如果 Eden 区的大小为 80M,求堆空间总大小?
根据比例可以推算出(Eden:survivor1:survivor2 =8:1:1),两个 survivor 区各 10M,新生代 100M。老年代默认是年轻代的两倍,即 200M。那么堆总大小就是 3000M。