JVM
学习JVM的笔记
loser与你
这个作者很懒,什么都没留下…
展开
-
类加载器
类加载器 类加载器用于实现“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作,这个动作放置在虚拟机外部,以便应用程序可以自己决定如何获取所需的类。 每一个类加载器,都拥有一个独立的类名称空间。对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性。 显然,要比较两个类是否相等,不仅要看其是否源于同一个Class文件,还要看它们是否是同一个类加载器加载的。而比较两个类相等,通常是由Class对象的equals()方法、isAssignableFrom()方原创 2021-09-27 10:57:20 · 136 阅读 · 0 评论 -
JVM中的类加载机制
JVM中的类加载机制 JVM的类加载机制就是Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型这一过程。 在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的。 1.类加载的顺序 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载、验证、准备、解析、初始化、使用和卸载七个阶段,其中验证、准备、解析三个部分统称为连接。类的加载过程则按这个顺序进行。 2.类加载的时机原创 2021-09-27 10:16:03 · 113 阅读 · 0 评论 -
JVM垃圾收集算法
JVM垃圾收集算法 1.标记-清除算法 最基础的垃圾收集算法。 算法分为标记和清除两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象。 缺点: (1)执行效率不稳定,当Java堆中包含大量对象且大部分是需要回收的时候,这时必须进行大量标记和清除工作,导致效率很低。 (2)内存空间的碎片化问题,会产生大量不连续的内存碎片。 2.标记-复制算法 目前的商用Java虚拟机多采用此算法。 解决了标记-清除算法的两个缺点。 将可用的内存按容量划分为大小相等的两块,每次只使原创 2021-09-13 18:08:10 · 105 阅读 · 0 评论 -
强、软、弱、虚引用
强、软、弱、虚引用 1.强引用 最传统的“引用”的定义 指在程序代码中普遍存在的引用赋值,即类似Object obj = new Object()这种引用关系 无论任何情况下,只要强引用关系还存在,垃圾收集器就永远不会回收掉被引用的对象 2.软引用 用来描述一些还有用,但非必须的对象 只被软引用关联着的对象,在系统将要发生内存溢出异常前,会把这些对象列进回收范围之中进行第二次回收,如果这些回收还没有足够的内存,才会抛出内存溢出异常 3.弱引用 用来描述那些非必须对象 被弱引用关联的对象只能生存原创 2021-09-01 21:19:51 · 69 阅读 · 0 评论 -
如何判断对象已经死亡
如何判断对象已经死亡 1.引用计数算法(主流Java虚拟机不使用) 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1。任何时刻计数器为零的对象就是不可能再使用的。 原理简单,判定效率高 存在缺陷,比如对于对象相互循环引用问题难以解决 2.可达性分析算法(多数使用这个) 通过一系列“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”,如果某个对象到GC Roots间没有任何引用链相连,即不可原创 2021-09-01 21:17:14 · 374 阅读 · 0 评论 -
JVM内存区域
JVM内存区域 1.程序计数器 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器 每个线程有一个独立的程序计数器,各线程的程序计数器互不影响,独立存储,即线程私有 若线程正在执行一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;若正在执行的是本地方法,这个计数器值应为空 此内存区域是唯一的在《Java虚拟机规范》中没有规定任何OutOfMemoryError情况的区域 2.虚拟机栈 线程私有,生命周期与线程相同 描述的是Java方法执行的线程内存模型 每个原创 2021-09-01 21:11:12 · 73 阅读 · 0 评论
分享