JAVA虚拟机
Return lock;
喜欢分享一些自己所学的IT知识,平时发布一些学习笔记,希望对大家有所帮助,欢迎大家前来指鉴。
展开
-
JVM的类加载过程
JVM(Java Virtual Machine)的类加载过程是Java程序运行时非常重要的一部分,它负责将编译后的Java类加载到内存中,并对这些类进行初始化、链接和验证。类加载过程主要分为加载(Loading)、链接(Linking)和初始化(Initialization)三个阶段。(3)初始化 :执行类构造器(不是常规的构造方法),为静态变量赋初值并初始化静态代码块。解析:将常量池中的符号引用(如类的全限定名)解析为直接引用(类在实际内存中的地址)验证:验证字节码文件的正确性。原创 2024-07-07 16:58:33 · 370 阅读 · 0 评论 -
HotSpot虚拟机对象探秘
须在对象数据上保留类型指针,换句话说,查找对象的元数据信息并不⼀定要经过对象本。同宽度的字段总是被分配到⼀起存放,在满⾜这个前提条件的情况下,在⽗类中定义的变。如果没有,那必须先执⾏相应的类加载过程,在类加载检查通过后,接下来虚拟机。将为新⽣对象分配内存。数组的⻓度是不确定的,将⽆法通过元数据中的 信息推断出数组的⼤⼩。,⽆论是从⽗类继承下来的,还是在⼦类中定义的字段都必须记录起来。部分是对象真正存储的有效信息,即我们在程序代码⾥⾯所定义的各种类。,这并不是必然存在的,也没有特别的含义,它仅仅起着占位。原创 2024-07-07 09:22:25 · 386 阅读 · 0 评论 -
如果可达性分析算法判定为不可达对象,就一定必须死吗?
级的Finalizer线程去执⾏它们的finalize()⽅法。finalize()中成功拯救⾃⼰——只要重新与引⽤链上的任何⼀个对象建⽴关联即可,譬如把。可达性分析后发现没有与GC Roots相连接的引⽤链,那它将会被第⼀次标记,随后进⾏。放置在⼀个名为F-Queue的队列之中,并在稍后由⼀条由虚拟机⾃动建⽴的、低调度优先。即使在可达性分析算法中判定为不可达的对象,也不是“⾮死不可”的,这时候它们暂时还。处于“缓刑”阶段,要真正宣告⼀个对象死亡,⾄少要经历。次机会,稍后收集器将对F-Queue中的对象进⾏。原创 2024-07-07 16:29:28 · 220 阅读 · 0 评论 -
什么是引用?
首先"引用"(Reference)通常指的是一种数据类型或者数据结构中的元素,它提供了对另一个变量或对象的间接访问。引⽤的存在,完全不会对其⽣存时间构成影响,也⽆法通过虚引⽤来取得⼀个对象实例。为⼀个对象设置虚引⽤关联的唯⼀⽬的只是为了能在这个对象被收集器回收时。的定义,是指在程序代码之中普遍存在的引⽤赋值,即类似。,但是它的强度⽐软引⽤更弱⼀些,被弱引⽤关联。,它是最弱的⼀种引⽤关系。对引⽤的概念进⾏了扩充,将引⽤分为。只被软引⽤关联着的对象,在系统将。软引⽤是⽤来描述⼀些还。弱引⽤也是⽤来描述那些。原创 2024-07-07 16:28:21 · 303 阅读 · 0 评论 -
垃圾收集(Garbage Collection, 简称GC)需要完成的三件事情:
因此这⼏个区域的内存分配和回收都具备确定性, 在这⼏个区域内。,在⼤多数情况下它都是⼀个不错的算法。虑,必须要配合⼤量额外处理才能保证正确地⼯作,譬如单纯的引⽤计数就很难解决。始节点集,从这些节点开始,根据引⽤关系向下搜索,搜索过程所⾛过的路径称为。引⽤计数算法虽然占⽤了⼀些额外的内存空间来进⾏计数,但。,栈中的栈帧随着⽅法的进⼊和退出⽽有条不紊地执⾏。的内存管理⼦系统,都是通过可达性分析算法来判定。,譬如各个线程被调⽤的⽅法堆栈中使⽤。零的对象就是不可能再被使⽤的。对象,⼀些常驻的异常对象。原创 2024-07-07 16:18:52 · 367 阅读 · 0 评论