JVM 面试题

JVM内存

1、JVM方法区存储内容 是否会动态扩展,是否会出现内存溢出,出现的原因有哪些?
2、JVM内存分为哪些区域?每个区域都存储哪些数据?一个对象从创建到销毁都是怎么在这些部分里存活和转移的?内存的哪些部分会参与GC的回收?
3、JVM内存分代,Java 8的内存分代改进

垃圾收集

1、常见的垃圾回收算法,Hotspot虚拟机中每种收集器使用的是哪些算法,各种算法的优缺点
2、列举jvm堆溢出和栈溢出的场景
3、JVM垃圾回收机制,何时触发MinorGC、FullGC
4、新生代和老生代的内存回收策略
5、什么时候一个对象会被GC?为什么要在这种时候对象才会被GC?GC策略都有哪些分类?这些策略分别都有什么优劣势?都适用于什么场景?举个实际的场景,让你选择一个GC策略?为什么要选择这个策略?
6、用什么方式可以查看是哪个类占用资源较多
7、JVM 参数都有哪些?GC日志参数、设置各区域大小的参数
8、常用垃圾收集器的优缺点,G1收集器
9、测试环境、生产环境都是怎么配置堆栈内部各分区大小的?为什么这么配置?
10、jvm调优有什么思路;
11、jvm中的栈区一般分配多大,为什么
12、Eden和Survivor的比例分配默认是多少
13、java8中jvm做了哪两个主要的调整
14、在tomcat中如何配置JVM各个区域的内存大小?
15、你有没有遇到过OutOfMemory问题?你是怎么来处理这个问题的?处理 过程中有哪些收获?
16、内存溢出和内存泄漏分别是什么?有什么区别?
17、内存溢出有哪些种类?分别是什么原因引起的?
18、怎样解决内存溢出问题(使用什么工具快速定位)
19、如何查看垃圾回收日志
20、当一个Java程序响应很慢时如何查找问题、
21、当一个Java程序频繁FullGC时如何解决问题、
22、当一个Java应用发生OutOfMemory时该如何解决、
23、如何判断是否出现死锁
24、如何判断是否存在内存泄露
25、CPU使用率高居不下/系统无响应或响应慢,该怎么解决(使用什么工具?)

类加载

1、Java类加载的顺序是什么,每个步骤都做了哪些工作
2、Java的类加载器都有哪些?每个类加载器都加载哪些类?这些类加载之间的父子关系是怎样的?双亲委派模型是什么?有什么好处?什么情况下会破坏双亲委派模型?
3、如何⾃定义⼀个类加载器?你使⽤过哪些或者你在什么场景下需要⼀个⾃定义的类加载器吗?自己的类加载器和Java自带的类加载器关系如何处理?
4、Classloader源码看过没?loadClass方法、findClass方法、findLoadedClass方法的作用。
5、编译与反编译:javac 、javap 、jad 、CRF的用法
6、JVM的编译优化、JIT即时编译器
7、oop-klass模型、对象头
8、Java.lang.NoSuchFieldError错误可能在什么阶段抛出

JVM内存模型

1、Java的内存模型是怎么设计的?为什么要这么设计?结合内存模型的设计谈谈volatile关键字的作用?
2、Java内存可见性
3、对Java内存模型的理解,以及其在并发中的应用
4、指令重排序,内存栅栏等
5、内存可见性、重排序、顺序一致性、volatile、锁、final

想了解更多,关注微信公众号:程序员开发者社区
www.benjming.com

你可能感兴趣的:(JVM 面试题)