黑马程序员JVM
文章平均质量分 70
SXJR
这个作者很懒,什么都没留下…
展开
-
扩展-通过idea 中的Frames 来查看当前栈帧
假如有如下一个类,我们在idea 中可以通过后续的操作查看出栈入栈的情况。** 执行到了A方法,A方法入栈,之后的方法执行依次类推**原创 2024-07-28 17:23:56 · 286 阅读 · 0 评论 -
8. 运行时数据区-堆
一般Java程序中堆内存是空间最大的一块内存区域。创建出来的对象都存在于堆上。栈上的局部变量表中,可以存放堆上对象的引用。静态变量也可以存放堆对象的引用,通过静态变量就可以实现对象在线程之间共享。堆内存的调优堆空间有三个需要关注的值,used total max。used指的是当前已使用的堆内存,total是java虚拟机已经分配的可用堆内存,max是java虚拟机可以分配的最大堆内存。·如果不设置任何的虚拟机参数,max默认是系统内存的1/4,total默认是系统内存的1/64。在实际原创 2024-07-28 17:17:34 · 387 阅读 · 0 评论 -
7. 运行时数据区-栈
当一个方法被调用时,JVM会保存当前线程的程序计数器的值作为返回地址,这个值指示了在调用当前方法之前,线程正在执行的指令的下一条位置。,0代表注释掉的方法A,1代表变量i,2代表变量j,由此我们可以看出以变量"i"为例,i在第二行开始执行,也就是下方为1的位置,在第六行结束也就是下方为5的位置,所以这里的起始pc为2,长度为5。**序号:**对应局部变量表中变量的起始位置,也就是“槽”的位置,假如有一个变量为 ** i **则在局部变量表中的序号为0,则变量 i 在局部变量表中槽的位置为0。原创 2024-07-28 17:04:35 · 938 阅读 · 0 评论 -
6. 运行时数据区-程序计数器和栈帧
程序计数器也叫做PC寄存器,PC寄存器是用来存储指向下一条指令的内存地址,也即将将要执行的指令代码,由执行引擎读取下一条指令,在执行完毕当前指令之后,JVM的执行引擎会通过程序计数器获取下一条指令的地址来执行后续指令。当前类的字节码指令引用了其他类的属性或者方法时,需要将符号引用(编号)转换成对应的运行时常量池中的内存地址。动态链接就保存了编号到运行时常量池的内存地址的映射关系。Java虚拟机在运行Java程序过程中管理的内存区域,称之为。运行时数据区分为两大类,线程共享和线程不共享,原创 2024-07-28 16:53:39 · 448 阅读 · 0 评论 -
5. 双亲委派机制
ClassLoader中的loadClass方法分析// name字段:class名称// resolve: 是否执行链接阶段的代码,如果为true则执行链接阶段的相关代码// 加锁防止多线程情况下重复加载// 首先检查当前类是否已经被加载Class原创 2024-07-28 16:39:29 · 776 阅读 · 0 评论 -
4. 类加载器
将当前jar包放入jre/lib下之后启动类加载器会加载对应的jar包,不推荐这种方式,尽可能不要去更改JDK安装目录中的内容,因为Java虚拟机在加载的时候会对jar包的名称进行校验,名称必须符合一些规范,当不满足某些名称的规范的时候可能出现各种问题。然后输入,-Xbootclasspath/a:jar包目录/jar包名称,-Xbootclasspath后面的那个a 字符代表添加的意思。去掉了扩展类加载器,新增平台类加载器根据jdk9中的模块化的概念进行加载,剩余部分等待后续补充。原创 2024-07-28 16:35:04 · 891 阅读 · 0 评论 -
3. 类的生命周期
初始化阶段会执行字节码文件中clinit部分的字节码指令,这里的clinit 中cl 代表类(class),而init 代表初始化,所以这里代表的就是类的初始化,所以初始化阶段执行的就是字节码文件中的clinit部分的指令。这个有个问题,下面的代码时成员变量,如果非成员变量的情况下准备阶段是否也能在编译器就确定某些变量的值(应该是可以的,回头用Java命令确定一下)这段代码在准备阶段的值是0因为int 类型没有赋值之前的值默认都为0,而在初始化阶段才会把当前的真正将1的值赋值给value字段。原创 2024-07-27 23:56:41 · 1015 阅读 · 0 评论 -
2. Class 文件的组成
class文件魔数就是指class文件开头的ca fe ba be 联合起来是咖啡馆的意思,魔数(Magic Number)用于辨别当前文件是否是JavaClass 文件,例如:将class 文件的后缀".classJPEG 图像文件:FF D8 FFPNG 图像文件:89 50 4E 47 0D 0A 1A 0AGIF 图像文件:47 49 46 38 39 61 或 47 49 46 38 37 61BMP 图像文件:42 4D。原创 2024-07-27 23:09:49 · 858 阅读 · 0 评论 -
jvm 发展历程
*本地接口(JIT):**本地调用已经被编译的方法,例如:常见的C++ 方法,执行引擎负责调用本地接口。**运行时数据区:**用于存放加载到内存中的字节码的区域。**执行引擎:**即时编译,解释器,垃圾回收器等。将字节码文件加载到jvm 当中。原创 2024-07-27 22:59:17 · 189 阅读 · 0 评论