1 Star 0 Fork 31

moyu3390 / Ebooks_1

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

最新2021年jvm面试题高级面试题及附答案解析

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

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

JVM

题1:对象的内存布局有哪几部分组成?

对象内存布局分为三部分:对象头、实例数据、对齐填充。

对象头包含两部分:

1)存储对象自身运行时数据:哈希码、分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等

2)对象指向它的类元数据指针–类型指针。

实例数据:程序代码中所定义的各种类型的字段内容。

对齐填充:不是必然存在,仅起到占位符作用(对象大小必须是8子节整数倍)

题2:Java 中什么是弱引用?

弱引用需要使用WeakReference类来实现,相对比软引用的生命周期更短。

对于只有弱引用的对象来说,垃圾回收机制一运行,垃圾回收器线程扫描它所管辖的内存区域过程中,不管当前内存空间是否足够,都会回收它的内存。但是由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。

String str = new String("abc");
WeakReference<String> weakReference = new WeakReference<>(str);
str = null;

注意的是如果一个对象是很少使用且希望在使用时随时就能获取到该对象,但又不想影响此对象的垃圾收集,那么建议使用Weak Reference来记住此对象。

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

内存屏障,也叫内存栅栏,是一种CPU指令,用于控制特定条件下的重排序和内存可见性问题。

LoadLoad屏障:对于这样的语句Load1; LoadLoad; Load2,在Load2及后续读取操作要读取的数据被访问前,保证Load1要读取的数据被读取完毕。

StoreStore屏障:对于这样的语句Store1;StoreStore; Store2,在Store2及后续写入操作执行前,保证Store1的写入操作对其它处理器可见。

LoadStore屏障:对于这样的语句Load1;LoadStore; Store2,在Store2及后续写入操作被刷出前,保证Load1要读取的数据被读取完毕。

StoreLoad屏障:对于这样的语句Store1;StoreLoad; Load2,在Load2及后续所有读取操作执行前,保证Store1的写入对所有处理器可见。它的开销是四种屏障中最大的。 在大多数处理器的实现中,这个屏障是个万能屏障,兼具其它三种内存屏障的功能。

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

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

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

题5:Java 中什么是内存模型?

java内存模型(JMM)是线程间通信的控制机制,JMM定义了主内存和线程之间抽象关系。

线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。

本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。

题6:GC是什么?为什么要有GC?

GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

Java开发人员不必担心内存管理问题,这是因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用一下方法:

System.gc() 
Runtime.getRuntime().gc() 

题7:Java 中 JVM 使用哪些寄存器?

所有进程都使用寄存器,Java虚拟机使用下列寄存器管理系统堆栈:

程序记数寄存器:跟踪程序执行的准确位置

堆栈指针寄存器:指示操作栈项

框架寄存器:指向当前执行的环境

变量寄存器:指向当前执行环境中第一个本地变量

Java开发组决定Java只使用四个寄存器,这是因为如果使用的寄存器数多于处理器端口数,那么处理器的效率将严重地降低。

Java虚拟机中的堆栈用于存放变量,Java程序向Java虚拟机传递字节码,Java虚拟机为每个方法创建堆栈框架,每个框架维护三种信息:

1)局部变量:由变量寄存器指向的32位变量数组。 2)执行环境:由框架寄存器指向和执行的方法。 3)操作堆栈:执行先进先出规则(FIFO),它是32位宽度的,它为操作码维护必要的参数,该堆栈的顶部是由堆栈指针寄存器索引的。

寄存器位于处理器内部,这一点和其他的存储媒介都不一样。不过寄存器个数是有限的。在内存中的寄存器区域是由编译器根据需要来分配的。程序开发人员不能够通过代码来控制这个寄存器的分配。

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

Java语言中一个显著的特点就是引入了垃圾回收机制,使C++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有"作用域"。

垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。

回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

题9:类加载器分为哪几类?

JVM默认提供了系统类加载器(JDK1.8),包括如下:

Bootstrap ClassLoader(系统类加载器)

Application ClassLoader(应用程序类加载器)

Extension ClassLoader(扩展类加载器)

Customer ClassLoader(自定义加载器)

题10:JVM 中如何判断两个类相同?

1、类的全限定名是否相等。

2、类加载器是否相等。

即便是同样的字节代码,被不同的类加载器加载之后所得到的类,也是不同的。

比如一个Java类com.example.Sample,编译之后生成了字节代码文件Sample.class。

两个不同的类加载器ClassLoaderA和ClassLoaderB分别读取了这个Sample.class文件,并定义出两个 java.lang.Class类的实例来表示这个类,那么这两个实例是不相同的。对于Java虚拟机来说,它们是不同的类。

题11:什么是分布式垃圾回收dgc它是如何工作的

题12:jvm-中调优命令有哪些

题13:什么是静态分派与动态分派

题14:java-中什么是-cms-收集器

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

题16:rmi-中使用-rmi-安全管理器rmisecuritymanager的目的是什么

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

题18:java-中类加载器都有哪些

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

题20:jvm-中-32-位和-64-位的最大堆内存分别是多少

题21:java-中什么是新生代

题22:java-中什么是软引用

题23:java-中什么是-osgi-动态模型系统

题24:生产环境中应用的-jvm-参数有哪些

题25:描述一下-jvm-加载-class-文件的原理机制

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/moyu3390/ebooks_1.git
git@gitee.com:moyu3390/ebooks_1.git
moyu3390
ebooks_1
Ebooks_1
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891