![](https://img-blog.csdnimg.cn/327e7549f621420f9fadc662dc440b3f.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM
文章平均质量分 88
Java Virtual Machine,java 虚拟机;
JMM,java内存模型
1 + 1=王
CSDN博客专家;
CSDN优质创作者;
阿里云社区专家博主;
华为云云享专家;
51CTO专家博主;
热爱JAVA的计算机科学与技术(人工智能)研究生在读;
全国大学生计算机设计大赛国家二等奖;
三维数字化创新设计大赛四川省特等奖、国家三等奖;
蓝桥杯全国软件与信息技术专业人才大赛三等奖;
MathorCup数学建模挑战赛三等奖.
展开
-
【深入理解java虚拟机】 - 类加载器与双亲委派模型
Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”。类加载器用于实现类的加载动作,对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。隔离加载类修改类加载的方式扩展加载源防止源码泄漏。......原创 2022-07-26 08:34:29 · 5819 阅读 · 67 评论 -
【深入理解java虚拟机】 - JVM类的加载过程
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最 终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。一个类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initialization)、使用(Using)和卸载(Unloading) 七个阶段,其中验证、准备、解析三个部分统称为链接(L原创 2022-07-15 07:45:00 · 6805 阅读 · 45 评论 -
【深入理解java虚拟机】 - JVM字节码指令介绍
Java源代码经过编译器编译之后会生成一个字节码文件,字节码是一种二进制的类文件,它的内容是JVM指令,而不像C或C++由编译器直接生成机器码。字节码指令由一个字节长度的、代表着某种特定操作含义的操作码(opcode)以及跟随其后的零至多个代表此操作所需参数的操作数所构成。虚拟机中许多指令并不包含操作数,只有一个操作码。如果不考虑异常处理的话,那Java虚拟机的解释器可以使用下面这段伪代码作为最基本的执行模 型来理解:javap的用法javap是 Java class文件分解器,可以反编译,也可以查看j原创 2022-06-27 21:13:53 · 2971 阅读 · 7 评论 -
JVM指令码表
文章目录常量入栈指令将栈顶值保存到局部变量中指令wide指令通用(无类型)栈操作指令类型转换指令整数运算浮点运算逻辑运算条件跳转指令比较指令无条件跳转指令表跳转指令异常对象操作指令数组操作指令方法调用返回指令进程同步指令常量入栈指令## 局部变量值转载到栈中指令将栈顶值保存到局部变量中指令wide指令通用(无类型)栈操作指令类型转换指令整数运算浮点运算逻辑运算条件跳转指令比较指令无条件跳转指令表跳转指令异常对象操作指令数组操作指令方法调用返回指原创 2021-12-29 21:30:00 · 916 阅读 · 0 评论 -
【深入理解java虚拟机】 - class类文件结构
“一次编写,到处运行 (Write Once,Run Anywhere)”。Oracle公司以及其他虚拟机发行商发布过许多可以运行在各 种不同硬件平台和操作系统上的Java虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节 码,从而实现了程序的“一次编写,到处运行”。实现语言无关性的基础是虚拟机和字节码存储格式。Java虚拟机不与包括Java语言在内的任何程序语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机 指令集、符号表以及若干其他辅助信息。无论使原创 2022-06-24 20:25:16 · 3787 阅读 · 52 评论 -
【深入理解java虚拟机】 - JVM垃圾回收器
1. 按线程数分按照线程数(用于垃圾回收的)可以分为串行垃圾回收器和并行垃圾回收器。3. 按碎片处理方式分按照按工作模式可以分为压缩式垃圾回收器和非压缩式垃圾回收器。压缩式垃圾回收器会在回收完成后,对存活对象进行压缩整理,消除回收后的碎片。Serial收集器是最基础、历史最悠久的收集器,曾经(在JDK 1.3.1之前)是HotSpot虚拟机新生代收集器的唯一选择。Serial收集器是一个单线程工作的收集器,在它进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束。Serial Old是Seria原创 2022-06-18 19:53:13 · 1128 阅读 · 40 评论 -
【深入理解java虚拟机】 - JVM垃圾回收算法
垃圾收集器在对堆进行回收前,第一件事情就 是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。判断对象是否存活有以下两种算法:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就 +1 ;当引用失效时,计数器值就-1 ;任何时刻计数器为 0 的对象就是不可能再被使用的。引用计数法原理简单,判定效率也很高,但单纯的引用计数就很难解决对象之间相互循环引用的问题。例如,存在两个对象象objA和objB,他们都有字段instance,令。除此之外,这两个对象再无任何引用,实际上这两个对象已 经不可能再原创 2022-06-16 20:44:25 · 4211 阅读 · 19 评论 -
【深入理解java虚拟机】 - HotSpot虚拟机中对象的创建、内存布局和访问
当Java虚拟机遇到一条字节码new指令时:整个过程如下图所示:对象创建以后被存放在堆区中,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。HotSpot虚拟机对象的对象头部分包括两类信息。此外,如果对 象是一个Java数组,那在对象头中还必须有一块用于记录数组长度的数据,因为虚拟机可以通过普通 Java对象的元数据信息确定Java对象的大小,但是如果数组的长度是不确定的,将无法通过元数据中的 信息推断出数组的大小。实原创 2022-06-13 19:22:38 · 1856 阅读 · 6 评论 -
【深入理解java虚拟机】 - JVM运行时数据区各部分简介
JVM在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。JVM管理的内存可以分为方法区、堆区、JVM栈、本地方法栈和程序计数器5个运行时数据区。其中JVM栈、本地方法栈和程序计数器是由所有线程共享的数据区;方法区和堆区是线程隔离的数据区。程序计数器(Program Counter Register)可以看作是当前线程所执行的字节码的行号指示器。字节码解原创 2022-06-06 19:08:16 · 3702 阅读 · 6 评论