jvm重点:内存管理,垃圾回收,类加载机制
一、内存
内存分为哪几部分,分别都存储哪些数据?
Java的内存模型是怎么设计的?为什么要这么设计?
怎么定位内存溢出问题,怎么解决?
内存的哪些部分会参与GC的回收?
Java内存分代模型,GC算法,JVM常见的启动参数;
什么情况下会出现OOM(堆内存,永久区,堆外区,方法栈)
二、垃圾回收
强引用为什么不会被回收?如何声明,用在什么场景(其他三个同理)
什么时候一个对象会被GC?
为什么要在这种时候对象才会被GC?
GC策略都有哪些分类?分别都有什么优劣势?都适用于什么场景?
举个实际的场景,选择一个GC策略?为什么要选择这个策略?
一个对象从创建到销毁,怎么在这些里存活和转移的?
为什么要用软引用,不用redis?
改配置,缩短相应时间,为什么要改降低垃圾回收频率?
1.堆里面都怎么分?新生代,老年代。
2.新生代如何到老年代
3.string a=new string("b")
a在常量池,new 出来的放在堆里,b在栈里
4.elden区,策略,和运行机制
5.新生代垃圾回收策略
6.老年代回收策略
7.两种垃圾回收,实际用哪种?
8.标记清扫,为嘛要标记那些标记的东西?怎么找那些存活的标记?可达性分析算法
JVM内存结构,GC算法,CMS、G1的原理
1、JVM堆的基本结构。
2、JVM的垃圾算法有哪几种?CMS收集算法的流程?
8、CMS算法的过程,CMS回收过程中JVM是否需要暂停(这块回答较好,也可以只是看毕玄的Java分布式开发或网上文章的学习, 可以结合JVM启动参数常见配置,jstat等命令,看下动手能力,意愿;以及实际线上问题排查)
11、常用的GC策略,什么时候会触发YGC,什么时候触发FGC
jvm调优,用哪些工具调优
类加载实际应用解释原理,写过哪些类加载
Java类加载器都有哪些?
每个类加载器都加载哪些类?
这些类加载之间的父子关系是怎样的?
什么是双亲委派模型?为什么Java类加载器要使用双亲委派模型?
如何自定义自己的类加载器,它和Java自带的类加载器关系如何处理?
oom内存溢出
jvm调优方式
怎么定位内存溢出?
3、JVM有哪些常用启动参数可以调整?
4、如何查看JVM的内存使用情况?
5、Java程序是否会内存溢出?
6、你常用的JVM配置和调优参数都有哪些?分别什么作用?