JVM00_面试官对类加载器子系统、运行时数据区、内存分布、执行引擎的灵虚拷问,你能坚持到第几问?(四)

简介: ⑩⑧. 字节码文件中都有什么?⑩⑨. 常量池中都有什么?②0.JVM的永久代中会发生垃圾回收么?②①. JVM在加载类的时候,是否按照类的加载、链接(验证、准备、解析)和初始化的顺序执行的?②②."父加载器"和"子加载器"之间的关系是继承的吗?②③. 如果我们自定义加载器,没有使用双亲委派机制,那么Java中的核心类库是不是还是会进行加载?②④. 为什么JDBC需要打破双亲委派机制?(tomcat也打破了)

⑩⑧. 字节码文件中都有什么?


  • ①. 魔术、版本(副版本、主版本)、常量池(字节码文件的基石)、访问标识、类索引|父类索引|接口索引集合、字段表集合、方法表集合、属性表集合


⑩⑨. 常量池中都有什么?


  • ①. 字面量和符号引号


  • ②. 字面量:Java中的常量和字符串


  • ③. 符号引号:
    类和接口的全限定名
    属性的名称和修饰符
    方法的名称和修饰符


②0.JVM的永久代中会发生垃圾回收么?


①. 方法区中的垃圾回收主要是:废弃的常量和不再使用的类型


②. HotSpot虚拟机对常量池的回收策略是很明确的,只要常量池中的常量没有被任何地方引用,就可以被回收


③. 判定一个常量是否"废弃”还是相对简单,而要判定一个类型是否属于"不再被使用的类”的条件就比较苛刻

了。需要同时满足下面三个条件:


该类所有的实例都已经被回收。也就是Java堆中不存在类以及任何派生子类的实例


加载该类的加载器已经被回收。这个条件除非是经过设计的可替换类加载器的场景,入OSGI、JSP的重加载等,否则通常是很难达成的


该类对应的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问该类的方法


②①. JVM在加载类的时候,是否按照类的加载、链接(验证、准备、解析)和初始化的顺序执行的?


不过Java虚拟机规范并没有明确要求解析阶段一定要按照顺序执行。在HotSpot VM中,加载、验证、准备和初始化会按照顺序有条不紊地执行,但链接阶段中的解析操作往往会伴随着JVM在执行完初始化之后再执行


②②."父加载器"和"子加载器"之间的关系是继承的吗?


  • 不是继承的关系,是包含的关系


②③. 如果我们自定义加载器,没有使用双亲委派机制,那么Java中的核心类库是不是还是会进行加载?


会由引导类加载器进行加载,这是因为不管是自定义加载器还是系统类加载器或者扩展类加载器,最终都必须调用java.lang.ClassLoader.defineClass(String,byte[],int,int,ProtectionDomain)方法,而该方法会执行preDefineC lass()接口,该接口中提供给了对JDK核心类库的保护


②④. 为什么JDBC需要打破双亲委派机制?(tomcat也打破了)


JDBC的Driver接口定义在JDK中,其实现由各个数据库的服务商来提供,比如MySQL驱动包,DriverManager类中要加载各个实现了Driver接口的类,然后进行管理,也就是说BootStrap类加载器还要去加载jar包中的Driver接口的实现类,这就打破了双亲委派机制


相关文章
|
6天前
|
存储 缓存 算法
深入浅出JVM(二)之运行时数据区和内存溢出异常
深入浅出JVM(二)之运行时数据区和内存溢出异常
|
6天前
|
Java Linux Arthas
linux上如何排查JVM内存过高?
linux上如何排查JVM内存过高?
792 0
|
6天前
|
存储 缓存 Java
JVM 运行时内存篇
JVM 运行时内存篇
9 0
|
6天前
|
Arthas 监控 Java
JVM工作原理与实战(三十一):诊断内存泄漏的原因
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了诊断内存溢出的原因、MAT内存泄漏检测的原理等内容。
18 0
|
5天前
|
Java 程序员
Java this关键字详解(3种用法),Java程序员面试必备的知识点
Java this关键字详解(3种用法),Java程序员面试必备的知识点
|
5天前
|
缓存 安全 Java
7张图带你轻松理解Java 线程安全,java缓存机制面试
7张图带你轻松理解Java 线程安全,java缓存机制面试
|
4天前
|
移动开发 前端开发 JavaScript
Java和web前端,IT新人该如何选择?,2024年最新Web前端内存优化面试
Java和web前端,IT新人该如何选择?,2024年最新Web前端内存优化面试
|
4天前
|
安全 Java 数据库
Spring boot 入门教程-Oauth2,java面试基础题核心
Spring boot 入门教程-Oauth2,java面试基础题核心
|
4天前
|
Java
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
|
5天前
|
存储 网络协议 前端开发
es集群安装,邮储银行java面试
es集群安装,邮储银行java面试