jvm 常见面试题

(1) Java 内存分配?

  1. Java虚拟机在执行Java的过程中会把管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,而有的区域则依赖线程的启动和结束而创建和销毁。
    程序计数器、java虚拟机栈、本地方法栈、堆、方法区、常量池
    Java内存区域划分、内存分配原理
  2. Java 内存分配全面浅析

(2) Java 堆的结构是什么样子的?

站在垃圾收集器的角度来看,可以把内存分为新生代与老年代。

什么是堆中的永久代(Perm Gen space)?

说说各个区域的作用?

程序计数器
java虚拟机栈
本地方法栈

方法区
常量池

Java 中会存在内存泄漏吗,简述一下?

在 Java 中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连(也就是说仍存在该内存对象的引用);其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为 Java 中的内存泄漏,这些对象不会被 GC 所回收,然而它却占用内存。

Java 类加载过程?

描述一下 JVM 加载 Class 文件的原理机制?

什么是类加载器?

类加载器有哪些?

什么是tomcat类加载机制?

类加载器双亲委派模型机制?

什么是GC? 为什么要有 GC?

简述一下Java 垃圾回收机制?

如何判断一个对象是否存活?

垃圾回收的优点和原理,并考虑 2 种回收机制?

垃圾回收器的基本原理是什么?

垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

深拷贝和浅拷贝?

System.gc() 和 Runtime.gc() 会做些什么?

什么是分布式垃圾回收(DGC)?它是如何工作的?

串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?

在 Java 中,对象什么时候可以被垃圾回收?

简述Minor GC 和 Major GC?

Java 中垃圾收集的方法有哪些?

讲讲你理解的性能评价及测试指标?

常用的性能优化方式有哪些?

说说分布式缓存和一致性哈希?

同步与异步?阻塞与非阻塞?

什么是GC调优?

常见异步的手段有哪些?

内存模型以及分区,每个区放什么
一个对象从创建到销毁都是怎么在这些部分里存活和转移的
内存的哪些部分会参与GC的回收,回收策略是什么
Java的内存模型是怎么设计的,为什么要这么设计
结合内存模型的设计谈谈volatile关键字的作用

深入Java虚拟机的内存结构
Java底层字节码分析
类加载机制详细讲解
个内存区域垃圾回收机制
深入讲解垃圾收集器
JDK调优工具

1、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

2、Java代码是怎么运行的?

3、Java虚拟机是如何加载Java类的?

4、JVM运行内存的分类

5、如何监控和诊断JVM堆内和堆外内存使用?

6、Java四引用是什么?

7、如何理解JVM内置的编译或GC日志?

8、JVM的永久代中会发生垃圾回收么?

9、Java中的两种异常类型是什么?他们有什么区别?

10、JVM是如何实现同步的?

11、Java内存模型是什么?

12、即时编译器有哪些优化?

13、在什么情况下重复读写操作会被优化?

14、什么样的垃圾才被回收?

15、什么时候会导致垃圾回收?

16、如何利用JFR和JMC监控Java程序?

17、如何利用Unsafe API 绕开 JVM的控制?

18、如何利用字节码注入为已有代码加料?