
Java虚拟机(JVM)
文章平均质量分 74
Java虚拟机(JVM)
库隐
这个作者很懒,什么都没留下…
展开
-
JVM1:Java类的加载过程
Java类的加载过程(附加载流程图)一、加载(Loading)二、连接(Linking)三.初始化(Initalization)原创 2021-03-23 23:58:50 · 217 阅读 · 0 评论 -
JVM2:类加载的机制——双亲委派机制(双亲委派模型)
一、双亲委派机制Java虚拟机堆class文件采用的是按需加载的方式,也就是说只有在使用的时候才会将对应的class文件加载到内存中,生成class对象。在加载某个类的class文件时,Java虚拟机采用的是双亲委派模式,即把加载的请求交由父类处理,他是一种任务委派模式。原理1)当一个类加载器收到了加载请求时,先是把这个请求委托给父加载器器去执行,而不是自己去先去加载。2)如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将达到顶层的启动类加载器3)从启动类加载器尝试去原创 2021-04-14 23:34:39 · 229 阅读 · 0 评论 -
JVM3:JVM运行时数据区概览
运行时数据区概览原创 2021-04-14 23:49:01 · 170 阅读 · 0 评论 -
JVM4:Java虚拟机栈
管理Java程序的运行,它保存方法的局部变量,部分结果,并参与方法的调用和返回。原创 2021-04-16 00:37:39 · 209 阅读 · 1 评论 -
JVM5:Java虚拟机栈——局部变量表(Local Variables)
文章目录Java虚拟机栈——局部变量表(Local Variables)1、局部变量表的相关概念1)线程安全问题2)线程安全问题3)局部变量表的容量大小及存储单位2、局部变量表的存储单位是slot(变量槽)1)关于Slot 的理解Slot中存放数据如何访问Slot中的数据2)slot的重复利用3、变量的分类按类型按声明位置Java虚拟机栈——局部变量表(Local Variables)1、局部变量表的相关概念局部变量表(也被称为局部变量数组或者本地变量表):定义一个数组,主要用于存储方法参数和定义在方原创 2021-04-18 00:05:02 · 671 阅读 · 0 评论 -
JVM6:Java虚拟机栈——操作栈(Operand Stack)
操作栈(Operand Stack)每一个独立的栈帧包含了局部变量表以外,操作栈,也可以称为表达式栈(Expression Stack)操作数栈,在方法执行过程中,根据字节码指令,往栈中存储数据或提取数据,也就是入栈(push)/出栈(pop)某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈,使用他们后再将他们压入栈中,主要用于保存计算过程中的中间结果,同时作为计算过程中变量临时的存储空间比如:执行复制、交换、求和等操作。是JVM执行引擎的一个工作区,当一个方法刚开始执行的时原创 2021-04-18 00:35:47 · 298 阅读 · 0 评论 -
JVM7:Java虚拟机栈——动态链接(Dynamic Linking)
动态链接(Dynamic Linking)每一个栈帧内部都包含一个指向运行时数据常量中的该栈帧所属方法的引用,包含这个引用的目的就是为了支持当前方法的方法的代码能够实现动态链接。比如invokedynamic指令在Java源文件中被编译到字节码的中时,所有的变量的和方法的引用都作为符号引用(Symbolic Reference),保存在class文件的常量池中。字节码中的方法调用指令就以常量池中指向方法的符号引用作为参数。 - 比如描述一个方法调用 另一个方法的时,就是通过常量池中指向方法的符号引用原创 2021-04-18 16:11:26 · 1292 阅读 · 1 评论 -
JVM8:Java虚拟机栈——方法返回地址(Return Address)
文章目录方法返回地址(Return Address)1、方法结束的两种方式1)正常执行完成2)出现未处理的异常,非正常退出方法返回地址(Return Address)存放调用该方法的PC计数器的值。1、方法结束的两种方式一个方法开始执行后,结束有两种方式:正常执行完成异常退出1)正常执行完成方法正常退出时,调用者的PC计数器的值作为返回地址,即调用该方法的指令的下一条指令。执行引擎遇到任何一个返回的字节码指令return,都会有返回值传递给上层的调用者,简称正常完成出口(Norma原创 2021-04-18 16:39:29 · 1336 阅读 · 0 评论 -
JVM9:堆空间(Heapspace)
文章目录堆(Heap)1、堆的相关概念2、堆空间大小的设置3、堆空间的划分堆(Heap)1、堆的相关概念一个JVM实例只存在一个堆内存,是所有线程共享的,堆也是Java内存管理的主要区域。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配 。但是随着JIT编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化发生,所有的对象都分配在堆上也渐渐变得不是那么“绝对”了。Ja原创 2021-04-18 21:43:49 · 979 阅读 · 0 评论 -
JVM10:元空间(Meta Space,方法区)
文章目录元空间(Meta Space)1、元空间的基本介绍2、Meta Space的演进永久代为什么要被元空间替换3、设置方法区大小和OOMJDK 8及以后4、元空间( Meta Space)存储什么?类型信息域(Field)信息方法(Method)信息静态变量(non-fianal的类变量)运行时常量池(Runtime Constant Pool)5、运行时常量池VS常量池元空间(Meta Space)1、元空间的基本介绍在Java 8 中称为元空间(Meta Space),在Java 7 及以前称原创 2021-04-22 07:58:58 · 6900 阅读 · 0 评论