1.什么是jvm?
JVM是java virtual machine 的缩写,jvm是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际上的计算机模拟仿真各种计算机功能实现的。
1.1jdk与jvm 有什么区别?
jvm+核心类库 = jre jre+java开发工具(javac.exe/jar.exe) = jdk Java Development Kit 即Java开发工具包
1.2 你认识哪些jvm厂商
sun jvm oracle jvm ibm jvm hp jvm
1.3 oracle jdk 和 open jdk 有什么区别?
| oracle jdk 和 openjdk 之间的区别 | Oracle jdk | Open jdk |
|---|---|---|
| 执照 | GPL(通用公共许可)授权 | GNU GPL授权 |
| 开发公司 | 由Sun Microsystem inc开发 | 由Oracle Openjdk和java社区开发 |
| 性能 | 根据Sun JDK的开发和实现提供性能 | 提供由Oracle JDK之上的一些供应商开发的高性能 |
| 可扩展性 | 根据Sun实施 | 可使用其他库或Oracle JDK进行改进 |
| 费用 | Sun官方许可证 | 开源和免费实施可供免费使用 |
| 速度 | 由Sun Microsystems Inc.开发 | 第三方供应商将通过进行一些调整来提高JVM的速度 |
| 操作系统 | 支持Windows,Linux,Solaris,MacOS | FreeBSD,Linux,Microsoft Windows,Mac OS X. |
| 便于使用 | 可以与任何应用程序开发一起使用 | 可以与任何应用程序开发和其他开源工具一起使用,以提高开源实现模型的性能。 |
1.4 开发中使用哪个版本的jdk?为什么这么选?
jdk1.8是java长期维护的一个版本,对应的新特性 xxxxx
2.什么是java字节码?
2.1字节码文件包含哪些内容?
魔数:魔数就是用来区分文件类型的一种标志
版本号
常量池
访问标志
类索引、父类索引、接口索引
字段表
方法表
属性表
2.2 什么是常量?
2.3 怎么理解常量池?
静态常量池:.class文件中的常量池 主要存放字面量和符号引用量
运行时常量池:jvm完成类装载后、将class文件中的常量池加载到内存中,并保存在方法区中
3.jvm的运行时数据有哪些?
线程共享部分:方法区、对内存
线程独占部分:虚拟机栈、本地方法栈、程序计数器
3.1什么是堆内存?
jvm启动时创建,用来存放实例对象的。垃圾回收器主要就是管理这块区域。
3.2堆内存包括哪些部分?
3.3什么是非堆内存?
4.什么是内存溢出
oom 是指应用系统中存在无法回收的内存或者使用过多内存时,最终使得程序要用到的内存大于能提供的最大内存,此时程序崩溃,系统就会提示内存溢出。
4.1什么是内存泄露?
memory leak 是指程序中已分配的堆内存由于某种原因程序未释放或者无法释放,造成系统内存的浪费,导致程序运行速度慢甚至系统崩溃等严重后果。
4.2 两者是什么关系
内存溢出是指申请了一个Integer,但给它Long才能存下的数,那就是内存溢出
内存泄露是指,程序在申请内存后,无法释放已经申请的空间,一次内存泄露可以忽略,但内存泄露堆积会导致内存耗光。
5.给你一个具体的类,请分析对象的内存占用
5.1 怎么计算出来的?
5.2 对象头中包含哪些部分?
6.常用的jvm参数有哪些?
X: Xms(初始堆大小) Xmx(最大堆大小) Xmn(新生代大小) Xss(指定线程栈大小)
XX:NewSize(设置年轻代最小空间大小) MaxNewSize(年轻代最大空间大小) PermSize(永久代最小空间大小) MaxPermSize(永久代最大空间大小) NewRatio(年轻代和老年代的比值) SurvivorRatio(年轻代Eden区和Survivor区比值大小)
6.1设置Xmx应该考虑哪些因素?
Xmx和Xms 设置为老年代存活对象的3-4倍,即fullGc之后的老年代内存占用的3-4倍
6.2 假设物理内存是8g,设置多大的堆内存比较合适?
6.3 Xmx与jvm占用的进程有什么关系?
首先jvm本身是一个程序,要申请一定的内存空间去运行,其次jvm在运行过程中也会创建对象,这些对象又保存到堆中。
6.4 怎样开启gc日志?
6.5 请指定g1垃圾收集器来启动程序?
7.java8默认使用的垃圾回收器是什么?
默认使用Parallel Scavenge 新生代 + Serival Old 老年代
7.1java11的默认的垃圾回收器是什么?
7.2常见的垃圾回收器有哪些?
Serial 收集器
ParNew 收集器
Parallel Scavenge 收集器
Serial Old 收集器
CMS(Concurrent Mark Sweep) 收集器
Parallel Old 收集器
G1 收集器
7.3什么是串行垃圾收集?
7.4什么是并行垃圾收集?
7.5什么是并发垃圾收集?
7.6什么是增量式垃圾收集?
7.7什么是年轻代?
年轻代用来存放新近创建的对象,对象更新速度快,在短时间内产生大量“死亡对象”
7.8什么是gc停顿?
为了让gc高效执行,在进行gc时,系统会让其他线程进入停顿的状态。
8.如果cpu使用率突然飙升,你会怎么排查?
FullGC次数过多
CPU程序计算耗时过高
不定期出现的接口耗时
某个线程进入waitting状态
8.1如果系统响应时间变慢,你会怎么排查?
cpu负载
网络流量
ping响应时间
端口连接数
服务连接数
8.2系统性能一般怎么衡量?
响应时间(RT)
吞吐量(Throughput)
并发用户数
QPS每秒查询率