记录java jvm学习笔记附带面试题

三类加载器: 1. 启动类加载器(BootstrapClassLoader) 2. 扩展类加载器(ExtClassLoader) 3. 应用类加载器(AppClassLoader) 加载器特点:  双亲委托  负责依赖 3. 缓存加载 一 字节码: Java bytecode 由单字节(byte)的指令组成,理论上最多支持 256 个操作码(opcode)。 实际上 Java 只使用了200左右的操作码, 还有一些操作码则保留给调试操作。 根据指令的性质,主要分为四个大类: 1. 栈操作指令,包括与局部变量交互的指令 2. 程序流程控制指令 3. 对象操作指令,包括方法调用指令 4. 算术运算以及类型转换指令

 

二 类加载器

1. 加载(Loading):找 Class 文件 2. 验证(Verification):验证格式、依赖 3. 准备(Preparation):静态字段、方法表 4. 解析(Resolution):符号解析为引用 5. 初始化(Initialization):构造器、静态变 量赋值、静态代码块 6. 使用(Using) 7. 卸载(Unloading)

 

 

 

三类加载器: 1. 启动类加载器(BootstrapClassLoader) 2. 扩展类加载器(ExtClassLoader) 3. 应用类加载器(AppClassLoader) 加载器特点: 双亲委托 负责依赖 缓存加载 三 JVM 内存结构

 

 

 

 

面试题:

1. 什么是JVM?
1.1 请问JDK与JVM有什么区别?
1.2 你认识哪些JVM厂商?
1.3 OracleJDK与OpenJDK有什么区别?
1.4 开发中使用哪个版本的JDK?生产环境呢? 为什么这么选?
2. 什么是Java字节码?
2.1 字节码文件中包含哪些内容?
2.2 什么是常量?
2.3 你怎么理解常量池?
3. JVM的运行时数据区有哪些?
3.1 什么是堆内存?
3.2 堆内存包括哪些部分?
3.3 什么是非堆内存?
4. 什么是内存溢出?
4.1 什么是内存泄漏?
4.2 两者有什么关系?
5. 给定一个具体的类,请分析对象的内存占用
5.1 怎么计算出来的?
5.2 对象头中包含哪些部分?
6. 常用的JVM启动参数有哪些?
6.1 设置堆内存XMX应该考虑哪些因素?
6.2 假设物理内存是8G,设置多大堆内存比较合适?
6.3 ­Xmx 设置的值与JVM进程所占用的内存有什么关系?
6.4 怎样开启GC日志?
6.5 请指定使用G1垃圾收集器来启动Hello程序
7. Java8默认使用的垃圾收集器是什么?
7.1 Java11的默认垃圾收集器是什么?
7.2 常见的垃圾收集器有哪些?
7.3 什么是串行垃圾收集?
7.4 什么是并行垃圾收集?
7.5 什么是并发垃圾收集器?
7.6 什么是增量式垃圾收集?
7.7 什么是年轻代?
7.8 什么是GC停顿(GC pause)?
7.9 GC停顿与STW停顿有什么区别?
8. 如果CPU使用率突然飙升,你会怎么排查?
8.1 如果系统响应变慢,你会怎么排查?
8.2 系统性能一般怎么衡量?
9. 使用过哪些JVM相关的工具?
9.1 查看JVM进程号的命令是什么?
9.2 怎么查看剩余内存?
9.3 查看线程栈的工具是什么?
9.4 用什么工具来获取堆内存转储?
9.5 内存Dump时有哪些注意事项?
9.6 使用JMAP转储堆内存大致的参数怎么处理?
9.7 为什么转储文件以 .hprof 结尾?
9.8 内存Dump完成之后,用什么工具来分析?
9.9 如果忘记了使用什么参数你一般怎么处理?
10. 开发性问题:你碰到过哪些JVM问题?

书籍推荐:

《深入理解Java虚拟机:JVM高级特性与最佳实践》周志明

《自己动手写Java虚拟机》

《实战Java虚拟机:JVM故障诊断与性能优化》

《揭秘Java虚拟机 JVM设计原理与实现》

 

  关注回复 书名即可获得

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐