
JVM
文章平均质量分 75
只是六号z
请保持那份热爱,来奔赴下一场山海。
展开
-
JVM之对象创建过程
JVM之对象的创建过程原创 2022-06-10 22:46:38 · 233 阅读 · 0 评论 -
JVM运行时常量池以及直接内存
JVM运行时常量池以及直接内存概述原创 2022-06-08 23:44:29 · 195 阅读 · 1 评论 -
JVM方法区
JVM方法区概述原创 2022-06-08 00:44:23 · 104 阅读 · 0 评论 -
JVM对象分配策略TLAB
对象分配策略TLAB原创 2022-06-08 00:35:33 · 172 阅读 · 0 评论 -
JVM之堆区
堆区面试题原创 2022-06-08 00:31:41 · 218 阅读 · 0 评论 -
JVM本地方法栈
本地方法栈本地方法栈本地方法栈Java虚拟机用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)如果线程请求分配的栈容量超出本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOverflowError异常。如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个OutofM原创 2022-03-16 16:04:29 · 117 阅读 · 0 评论 -
JVM本地方法接口
本地方法接口什么是本地方法?为什么要使用本地方法?什么是本地方法?简单地说,一个Native Method就是一个Java调用非Java代码的接口。本地方法接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序。这些方法都没有方法体,是因为都不是使用Java语言实现的。比如Object类的getClass()方法,被定义为final native,Thread方法下的start0()被定义为native void()等方法。标识符native可以与所有其他的Java标识符连原创 2022-03-13 17:20:23 · 915 阅读 · 0 评论 -
JVM方法返回地址以及栈帧中的一些附带信息
方法返回地址 (return address)方法返回地址栈帧中的一些附加信息方法返回地址方法返回地址就是存放该方法的pc寄存器的值。一个方法的结束,有两种方式:正常执行完成出现未处理的异常,非正常退出无论通过哪种方式退出,在方法退出后都返回到该方法被调用的位置。方法正常退出后,调用者的PC寄存器的值作为返回地址,即调用该方法的指令的下一条指令的地址。而通过异常退出的,返回地址是要通过异常表来确定,栈帧中一般不会保存这部分信息。**本质上,方法的退出就是当前栈帧出栈的过程。**此时,需要恢原创 2022-03-13 08:24:48 · 320 阅读 · 0 评论 -
JVM方法的调用(下)
JVM方法区动态类型语言和静态类型语言方法的重写本质虚方法表动态类型语言和静态类型语言动态类型语言和静态类型语言两者的区别就在于对类型的检查是在编译期还是在运行期,满足前者就是静态类型语言(更严格的语法规范),反之是动态类型语言。说的再直白一点就是,静态类型语言是判断变量自身的类型信息;动态类型语言是判断变量值的类型信息,变量没有类型信息,变量值才有类型信息,这是动态语言的一个重要特征。方法的重写本质1.找到操作数栈顶的第一个元素所执行的对象的实际类型,记作d.2.如果在类型c中找到与常量中的描原创 2022-03-11 21:36:42 · 363 阅读 · 0 评论 -
JVM方法的调用(上)
方法的调用静态链接和动态链接虚方法和非虚方法静态链接和动态链接在JVM中,将符号引用转换为调用方法的直接引用与方法的绑定机制相关。静态链接当一个字节码文件被装载进JVM内部时,如果被调用的目标方法在编译期可知,且运行期保持不变时。这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态链接。动态链接如果被调用的方法在编译期无法被确定下来,也就是说,只能够在程序运行期将调用方法的符号引用转换为直接引用,由于这种引用转换过程具备动态性,因此也就被称之为动态链接。对应的方法的绑定机制原创 2022-02-26 22:38:41 · 163 阅读 · 1 评论 -
栈顶缓存技术(Top-of-Stack-Cashing)
栈顶缓存技术和动态链接栈顶缓存技术(Top-of-Stack-Cashing)动态链接(指向运行时常量池的方法引用)栈顶缓存技术(Top-of-Stack-Cashing)由于基于栈式架构的虚拟机所使用的零地址指令更加紧凑,但完成一项操作的时候必然需要使用更多的入栈和出栈指令,这同时也就意味着需要更多的指令分派(instruction dispatch)次数和内存读/写次数。由于操作数是存储在内存中的,因此频繁地执行内存读/写操作必然会影响执行速度。为了解决这个问题,HotSpot JVM的设计者们提原创 2022-02-19 21:42:37 · 1139 阅读 · 0 评论 -
操作数栈(Operand Stack)
操作数栈操作数栈(Operand Stack)代码追踪操作数栈(Operand Stack)栈的具体实现:可以使用数组或者链表结构来实现。每一个独立的栈帧之中除了包含的局部变量表以外,还包含一个先进后出的操作数栈,也可以称之为表达式栈(Expression Stack)。操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或者提取数据,即入栈(push)/出栈(pop)。某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈,使用他们后再把结果压入栈。比如:执行复制、交换、求和等原创 2022-02-18 15:45:09 · 1937 阅读 · 0 评论 -
局部变量表(Local Variables)
局部变量表(Local Variables)局部变量表(Local Variables)字节码方法内部结构剖析关于Slot的理解局部变量表(Local Variables)局部变量表也称之为局部变量数组或者本地变量表。定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类基本数据类型、对象引用(reference),以及returnAddress类型。由于局部变量表是建立在线程的栈上,是线程的私有数据,因此不存在数据安全问题。局部变量表所需容量大小是在编译期确定下原创 2022-02-09 17:01:17 · 4453 阅读 · 0 评论 -
虚拟机栈(重要)
虚拟机栈虚拟机栈概述Java虚拟机栈(1)Java虚拟机栈概述(2)栈的特点(优点)(3)栈中可能出现的异常(4)设置栈内存大小栈的存储单位栈的运行原理栈帧的内部结构虚拟机栈概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。栈是运行时的单位,而堆是存储的单位。即: 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。 堆解决的是数据存储的问原创 2022-02-07 16:55:13 · 111 阅读 · 0 评论 -
程序计数器(PC寄存器)
程序计数器(PC寄存器)PC RegisterPC寄存器使用举例常见面试问题CPU时间片PC RegisterJVM中的程序计数寄存器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。P原创 2022-01-29 00:09:21 · 4046 阅读 · 0 评论 -
运行时数据区概述以及线程
运行时数据区概述内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申博分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。运行时数据区的结果简图如下:Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁x另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。灰色的原创 2022-01-29 00:06:05 · 1623 阅读 · 0 评论 -
类加载器分类及相关机制
类加载器类加载器分类虚拟机自带的加载器获取类加载器能够加载api的测试案例用户自定义类加载器关于ClassLoader双亲委派机制沙箱安全机制其他类加载器分类JVM支持两种类型的类加载器,分别为引导类加载器(Bootstrap ClassLoader)和自定义类加载器User-Defined classLoader)。从概念上来讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类原创 2022-01-22 22:51:43 · 491 阅读 · 0 评论 -
类加载子系统
类加载子系统内存结构概述类加载器与类的加载过程类加载器ClassLoader角色类的加载过程(1)Loading阶段(2)Linking阶段(3)Initialization阶段内存结构概述简图详细图类加载器与类的加载过程类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由ExecutionEngine决定加载的类信息存放于一块称为方法区的内存空间。除了类的信息以原创 2022-01-20 01:05:18 · 963 阅读 · 0 评论 -
JVM与Java体系结构
JVM和Java概述1.Java:跨平台的语言2.JVM:跨语言的平台3.虚拟机4.Java虚拟机5.JVM的位置6.JDK的构成图解7.JVM的整体结构8.Java程序执行流程9.JVM的架构模型10.JVM的生命周期JVM发展历程Sun Classic VMExact VMHotSpot VMBEA的JRocitIBM的J9KVM和CDC/ CLDC HotspotAzul VMLiquid VMApache HarmonyMicrosoft JVMTaobapJVMDalvik VM其他JVMGraa原创 2022-01-18 20:03:43 · 258 阅读 · 0 评论