![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 70
如何从零开始学习JVM虚拟机
栗子ing
一个正在努力的java 小白
展开
-
七、运行期优化
一开始调用的是native本地的反射invoke方法,然后执行了15次达到一个阈值之后,会将本地的反射实现类修改成GenerateMethodAccessor1的新的反射实现类,这个实现类会在内部将反射调用转化成类名.方法名的方式调用,提高效率。总之就是发现热点代码,然后提高将其编译成机器码来提高效率。节省1900去查找成员变量的操作。阈值15是可以通过参数设定的。原创 2024-01-11 15:52:52 · 355 阅读 · 0 评论 -
六、类加载器
一、概述 二、启动类加载器 最顶层的加载类,由C++实现,负责加载 %JAVA_HOME%/lib ⽬录下的jar包和类或者或被 -Xbootclasspath 参数指定的路径中的所 有类。 相关命令如下:了解一下就行 三、扩展类加载器 主要负责加载⽬录 %JRE_HOME%/lib/ext ⽬录下 的jar包和类,或被 java.ext.dirs 系统变量所指定的路径下的jar包。 四、应用程序类加载器 ⾯向我们⽤户的加载器,负责加载当前应⽤classpath下 的所有jar包和原创 2024-01-10 20:40:54 · 549 阅读 · 0 评论 -
五、类加载阶段
加载class类到方法区,然后下面的链接和初始化都是为了初始化方法区class类的成员变量,链接是初始化常量池字符引用为真正引用,初始化是给_mirror赋值。就是执行类的构造方法的阶段,也就是执行()V 方法的阶段,虚拟机会保证类的【构造方法】的线程安全。这时候D只是C中的一个未解析的符号引用,虚拟机是不知道他是什么东西的,也不知道他的内存地址。例如:如果修改了类的class文件的魔数信息,就会验证不通过,报错。将常量池中的符号引用 解析 为直接引用。那么这时候D也不会被加载、解析初始化。原创 2024-01-10 20:40:03 · 346 阅读 · 0 评论 -
四、类文件 | 字节码 | 语法糖
第一个方法的访问标志值 为0x0001,也就是只有ACC_PUBLIC标志为真,名称索引值为0x0007,查代码清单6-2的常量池得方法 名为“”,描述符索引值为0x0008,对应常量为“()V”,属性表计数器attributes_count的值为 0x0001,表示此方法的属性表集合有1项属性,属性名称的索引值为0x0009,对应常量为“Code”,说明 此属性是方法的字节码描述。对于接口索引集合,入口的第一项u2类型的数据为接口计数器(interfaces_count),表示索引表 的容量。原创 2024-01-09 19:58:32 · 1183 阅读 · 0 评论 -
三、垃圾回收
清除只需要记录对应内存的起始地址,终结地址,然后存到一个空闲队列等待分配minor gc会引发stop the world(暂停其他用户的线程,垃圾回收线程执行完成之后恢复)如果发现当前放入的对象太大,在老年代完全足够,然后伊甸园完全不够的情况下,寿命没有到15,也会自动晋升,放到老年代中。如果一个线程出现了OutOfMemoryError,不会导致整个java进程的结束。原创 2024-01-05 21:26:52 · 917 阅读 · 0 评论 -
二、内存结构
Program Counter Register 程序计数器(寄存器)Java Virtual Machine Stacks(Java虚拟机栈)1、每个线程运行时所需要的内存, 称为虚拟机栈2、每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存3、每个线程只能由一个活动栈帧,对应着当前正在执行的那个方法问题辨析:1、垃圾回收是否涉及栈内存?答: 否,垃圾回收器只会回收堆内存中的内存占用,栈的空间执行完之后会弹出,出栈,所以不需要垃圾回收器回收2、栈内存分配越大越好吗?原创 2023-12-03 16:43:03 · 828 阅读 · 0 评论 -
一、什么是JVM
定义:好处:比较:原创 2023-12-03 16:36:50 · 356 阅读 · 1 评论