活动介绍
file-type

JVM类加载与内存优化:从加载机制到垃圾回收深度解析

1.97MB | 更新于2025-03-20 | 123 浏览量 | 0 下载量 举报 收藏
download 立即下载
知识点: 1. JVM类加载机制:JVM类加载机制主要分为三个步骤:加载、链接、初始化。其中,加载是指将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。链接分为验证、准备和解析三个阶段。初始化则是对类变量进行初始化,即为类变量赋予正确的初始值。 2. 类加载器的种类及其作用:Java中有四种类型的类加载器,分别是引导类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)、应用程序类加载器(Application ClassLoader)和自定义类加载器(User-Defined ClassLoader)。引导类加载器主要负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,扩展类加载器主要负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包,应用程序类加载器主要负责加载ClassPath路径下的类包,自定义类加载器主要负责加载用户自定义路径下的类包。 3. 双亲委派机制及其意义:双亲委派机制是Java类加载器实现类加载的一种方式,当一个类加载器收到类加载的请求时,它首先不会自己尝试去加载这个类,而是将这个请求委托给父类加载器去完成,每一层都是如此。只有当父类加载器在它的搜索范围中找不到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。 4. Tomcat特殊类加载规则及其原因:Tomcat为了实现热部署,采用了一种特殊的类加载规则。在Tomcat中,每一个Web应用程序都有一个自己的类加载器实例,这个类加载器会在Web应用程序启动的时候,加载该应用目录下的类库。同时,为了实现组件的共享,Tomcat还定义了一个共同的类加载器,这个类加载器会加载所有Web应用程序共享的类库。 5. JVM对象的创建流程:JVM对象的创建流程包括类加载检查、内存分配及初始化等环节。类加载检查是检查加载的类是否已经被加载过。如果已经被加载过,则直接返回。否则,进入类加载阶段。内存分配是在堆内存中划分一块区域给新对象,分配内存的方式主要有指针碰撞和空闲列表两种。初始化则是为对象的实例变量赋予初始值。 6. 对象头结构、对象占用内存的计算方式:对象头主要由Mark Word和指向类的指针组成。Mark Word用于存储对象自身的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。对象占用内存的计算方式主要取决于对象头的大小和实例数据的大小。 7. 指针压缩的含义和效果:指针压缩是一种减少内存占用的技术,主要是通过减少对象指针的大小来实现的。在64位的JVM中,如果不开启指针压缩,那么一个对象指针的大小为8字节,开启指针压缩后,对象指针的大小变为4字节。 8. 对象栈上分配与标量替换的概念和技术背景:对象栈上分配是指在Java虚拟机中,将对象分配在栈上,而不是堆上。栈上分配可以减少垃圾收集的开销。标量替换是指如果一个对象可以被拆分为若干个值为基本类型或不可再分的引用类型,则可以将这些值替换为这些值,而不是创建一个实际的对象。 9. 垃圾回收机制中的引用计数法缺陷:引用计数法是一种垃圾回收机制,它的主要缺陷是无法处理循环引用的问题。如果两个对象相互引用,即使没有任何外部引用指向它们,它们也不会被垃圾回收器回收。 10. 基于可达性分析算法的垃圾对象查找:可达性分析算法是一种垃圾回收机制,它通过一系列称为“GC Roots”的对象作为起点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。 11. 垃圾回收算法如标记-清除和复制算法的介绍和比较:标记-清除算法是一种基本的垃圾回收算法,它分为标记和清除两个阶段。标记阶段标记出所有需要回收的对象,清除阶段则回收所有标记的对象。复制算法则是将内存分为大小相等的两块,每次只使用其中的一块,当一块内存用完时,就将存活的对象复制到另一块内存上,然后把已使用的内存一次清理掉。 12. G1收集器、ZGC等最新垃圾回收工具的工作原理:G1收集器是一种服务器端的垃圾回收器,主要目标是为了适应应用的需要,而将停顿时间控制在一个合理的时间范围内。ZGC是一种低延迟垃圾回收器,主要目标是在不牺牲吞吐量的情况下,实现应用程序的低延迟。 13. 内存泄露现象的成因及其解决办法:内存泄露是指程序中已分配的内存由于某些原因,导致程序无法释放或者无法正确释放,导致内存的浪费。内存泄露的成因主要有循环引用、不正确的对象释放、资源未关闭等。解决办法主要包括合理设计数据结构、及时释放无用的对象、合理使用资源等。 14. 字符串常量池和包装类常量池的解析:字符串常量池主要用来存储字符串常量,当创建一个字符串时,JVM会首先检查该字符串是否存在于常量池中,如果存在,则返回该字符串的引用。包装类常量池则是存储各种基本数据类型对应的包装类对象,例如Integer、Long等。 15. GC安全点的概念:GC安全点是指在JVM中,程序执行过程中的某个点,所有的线程都到达这个点后,JVM就可以进行垃圾回收。在GC安全点,所有的线程都需要停止运行,等待垃圾回收完成。

相关推荐

程序猿小白菜
  • 粉丝: 1060
上传资源 快速赚钱