Java资源分享网 - 专业的Java学习网站 学Java,上Java资源分享网
2024 JVM面试题及答案-共50道 下载
发布于:2024-03-16 12:34:27
(假如点击没反应,多刷新两次就OK!)

2024 JVM面试题及答案-共50道 下载 图1

 

 

 

资料内容:

 

对象在哪块内存分配?

数组和对象在堆内存分配;某些对象没有逃逸出方法,可能被优化为在栈上分配

谈谈JVM中的常量池

JDK 1.8开始

1、字符串常量池:存放在堆中,包括String对象执行intern()方法后存的地方、双引号直接引用的字符串

2、运行时常量池:存放在方法区,属于元空间,是类加载后的一些存储区域,大多数是类中 constant_pool 的内容

3、类文件常量池: constant   pool,JVM定义的概念

谈谈动态年龄判断

1、这里涉及到-XX:TargetSurvivorRatio 参数,Survivor区的目标使用率默认50,Survivor区对象目标使用率为50%

2Survivor区相同年龄所有对象大小的总和(Survivor区内存大小*这个目标使用率)时,大于或等于该年龄的对象直接进入老年代。

3、当然,这里还需要考虑参数-XX:MaxTenuringThreshold 晋升年龄最大阈值

谈谈永久代

1JDK8之前,Hotspot中方法区的实现是永久代(Perm)

2JDK7开始把原本放在永久代的字符串常量池、静态变量等移出到堆,JDK8开始去除永久代,使用元空间(Metaspace),永久代剩余内容移至元空间,元空间直接在本地内存分配。

JVM有哪些运行时内存区域?

Java 8

1The pc Register,程序计数器

2. Java Virtual Machine Stacks,Java 虚拟机栈

3Heap,

4   Method Area,方法区

5Run-Time Constant Pool,运行时常量池

6Native Method Stacks,本地方法栈

运行时栈帧包含哪些结构?

1、局部变量表

2、操作数栈

3、动态连接

4、返回地址

5、附加信息

JVM 的内存模型是什么?

JVM试图定义一种统一的内存模型,能将各种底层硬件以及操作系统的内存访问差异进行封装,使Java程序在不同硬件以及操作系统上都能达到相同的并发效果。它分为工作内存和主内存,线程无法对主存储器直接进行操作,如果一个线程要和另外一个线程通信,那么只能通过主存进行交换。

JVM 如何确定垃圾对象?

1JVM采用的是可达性分析算法,通过GC Roots来判定对象是否存活,从GC Roots向下追溯、搜索,会产生Reference Chain。当一个对象不能和任何一个GC Root产生关系时,就判定为垃圾。

2、软引用和弱引用,也会影响对象的回收。内存不足时会回收软引用对象;GC 时会回收弱引用对象。

哪些是GC Roots?

1、在虚拟机栈(栈帧中的本地变量表)中引用的对象,譬如各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等。

2、在方法区中类静态属性引用的对象,譬如Java类的引用类型静态变量。

3、在方法区中常量引用的对象,譬如字符串常量池(String Table)里的引用。

4、在本地方法栈中JNI(即通常所说的Native方法)引用的对象。

5Java虚拟机内部的引用,如基本数据类型对应的Class对象,一些常驻的异常对象(比如NullPointExcepitonOutOfMemoryError),还有系统类加载器。

6、所有被同步锁(synchronized关键字)持有的对象。

7、反映Java虚拟机内部情况的JMXBeanJVMTI中注册的回调、本地代码缓存等。