1 Star 0 Fork 31

阿明 / Ebooks

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
2021年JVM面试题大全附答案,常见JVM面试题汇总.md 9.05 KB
一键复制 编辑 原始数据 按行查看 历史

2021年JVM面试题大全附答案,常见JVM面试题汇总

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

JVM

题1:JVM 如何判断对象是否失效?可达性分析是否可以解决循环引用?

引用计数器算法:给对象添加一个引用计数器,当被引用时给计数器加1,引用失效减1,当为0时对象失效。实现简单,判定效率高,无法解决循环引用问题。

可达性分析算法:将一系列GC Root作为起始点,从这些节点开始向下搜索,所走过路径称为引用链,若一个对象无引用链,则判断是否执行finalize()方法,若finalize()被覆盖并且没被JVM调用过,则执行此方法,执行后若还无引用链,则对象失效。

可以作为GC Root的对象:

1)虚拟机栈中引用的对象。

2)方法区中类静态属性引用的对象。

3)方法区中常量引用的对象。

4)本地方法栈中Native方法引用的对象。

题2:常用的 JVM 调优配置参数有哪些?

假设参数为-Xms20m -Xmx20m -Xss256k

XX比X的稳定性更差,并且版本更新不会进行通知和说明。

1、-Xms

s为strating,表示堆内存起始大小

2、-Xmx

x为max,表示最大的堆内存,一般来说-Xms和-Xmx的设置为相同大小,当heap自动扩容时,会发生内存抖动,影响程序的稳定性

3、-Xmn

n为new,表示新生代大小,-Xss规定了每个线程虚拟机栈(堆栈)的大小。

4、-XX:SurvivorRator=8 

SurvivorRatio定义新生代中Eden区域和Survivor区域(From幸存区或To幸存区)的比例,默认为8,也就是说Eden占新生代的8/10,From幸存区和To幸存区各占新生代的1/10。

5、-XX:PretenureSizeThreshold=3145728

表示当创建(new)的对象大于3M的时候直接进入老年代

6、-XX:MaxTenuringThreshold=15

表示当对象的存活的年龄(minor gc一次加1)大于多少时,进入老年代

7、-XX:-DisableExplicirGC

表示是否(+表示是,-表示否)打开GC日志

题3:Java 中 WeakReference 和 SoftReference 有什么区别?

WeakReference和SoftReference都有利于提高GC和内存的效率。

WeakReference一旦失去最后一个强引用,就会被 GC回收,而软引用虽然不能阻止被回收,但是可以延迟到JVM内存不足的时候。

题4:Java 中什么是新生代?

新生代是用来存放新生的对象。一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。

新生代又分为Eden区、ServivorFrom、ServivorTo 三个区。

Eden区:Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当Eden区内存不够的时候就会触发MinorGC,对新生代区进行一次垃圾回收。

ServivorFrom:上一次GC的幸存者,作为这一次GC的被扫描者。

ServivorTo:保留了一次 MinorGC 过程中的幸存者。 MinorGC 的过程(复制->清空->互换)

MinorGC 采用复制算法。

1、Eden和ServivorFrom区域中存活的对象复制到ServicorTo区域(如果有对象的年龄以及达到了老年的标准,则赋值到老年代区),同时把这些对象的年龄+1(如果ServicorTo不够位置就放到老年区); 2、清空Eden和ServicorFrom中的对象; 3、ServicorTo和ServicorFrom互换,原ServicorTo成为下一次GC时的ServicorFrom区。

题5:虚拟机栈中有哪几部分组成?

局部变量表:存放方法参数和方法内部定义的局部变量,以变量槽Slot为基本单位,一个Slot可以存放32位以内的数据类型,可重用。

操作数栈:先入后出,32位数据类型所占栈容量为1,64为数据类型所占栈容量为2。

动态链接:常量池中符号引用有一部分在每次运行期间转换为直接引用,这部分称为动态链接。(一部分在类加载阶段或第一次使用时转换为直接引用—静态解析)。

方法返回地址:方法执行后退出的两种方式:正常完成出口(执行引擎遇到任意一个返回的字节码指令)和异常完成出口(在方法执行过程中遇到异常且此异常未被处理)。两种方式都需要返回到方法被调用的位置程序才能继续执行(正常退出时调用者的PC计数器的值可以作为返回地址且栈帧中很可能保存这个计数器值;异常退出返回地址要通过异常处理器表来确定,栈帧中一般不会保存)。

题6:Serial 与 Parallel GC 之间有什么区别?

Serial和Parallel在GC执行的时候都会引起stop-the-world。

它们之间主要不同在于serial收集器是默认的复制收集器,执行GC的时候只有一个线程,而parallel收集器使用多个GC线程来执行。

题7:Java 中什么是 OSGI( 动态模型系统)?

OSGi(Open Service Gateway Initiative)技术是Java动态化模块化系统的一系列规范。OSGi一方面指维护OSGi规范的OSGI官方联盟,另一方面指的是该组织维护的基于Java语言的服务(业务)规范。简单来说,OSGi可以认为是Java平台的模块层。

OSGi服务平台向Java提供服务,这些服务使Java成为软件集成和软件开发的首选环境。Java提供在多个平台支持产品的可移植性。

OSGi技术提供允许应用程序使用精炼、可重用和可协作的组件构建的标准化原语,这些组件能够组装进一个应用和部署中。

题8:JVM 中永久代中会发生垃圾回收吗?

垃圾回收不会发生在永久代。

如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。

如果仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。

Java1.8版本已经移除了永久代,新增加了一个叫做元数据区的native内存区。

题9:64 位 JVM 中 int 类型长度是多少?

Java中int类型变量的长度是一个固定值与平台无关,都是32位。

意思就是说在32位和64位的Java虚拟机中int类型的长度是相同的。

题10:Java 中引用类型有什么区别?

Java中有4种引用类型。

引用类型的级别和强度由高到低依次为:强引用->软引用->弱引用->虚引用。

引用类型 回收时间 使用说明 终止时间
强引用 从来不会 对象的一般状态 JVM停止运行时终止
软引用 当内存不足时 对象缓存 内存不足时终止
弱引用 正常垃圾回收时 对象缓存 垃圾回收后终止
虚引用 正常垃圾回收时 跟踪对象的垃圾回收状态 垃圾回收后终止

题11:java-中什么是-parnew-垃圾收集器

题12:垃圾回收的优点和原理。说说2种回收机制

题13:java-中什么是-serial-垃圾收集器

题14:cms-收集器和-g1-收集器有什么区别

题15:java-中什么是-parallel-scavenge-收集器

题16:你知道哪些垃圾回收算法

题17:说一下垃圾分代收集的过程。

题18:为什么新生代不使用标记-整理算法

题19:什么情况下会发生栈内存溢出

题20:堆和栈的概念它们有什么区别和联系

题21:java-中什么是可达性分析

题22:java-中g1-收集器有什么作用

题23:perm-space-中保存什么数据会引起-outofmemory-吗-

题24:什么是内存屏障包括哪些

题25:java-中什么是弱引用

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/AminDev/ebooks.git
git@gitee.com:AminDev/ebooks.git
AminDev
ebooks
Ebooks
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891