
JVM
文章平均质量分 96
爱我所爱0505
喜欢编程
展开
-
HotSpot虚拟机之内存模型与线程安全
共享变量如:实例字段、静态字段、数组元素等线程共享变量(不包含线程私有变量)。内存模型中有:主内存、工作内存,如下图所示是两者交互关系,看出。原创 2023-08-20 14:45:23 · 435 阅读 · 0 评论 -
HotSpot虚拟机之后端编译与优化
输出代码优化质量的高低决定编译器是否优秀的关键,编译器分为:前端编译器(将Java源码转变成字节码的过程,只完成源码到抽象语法树或字节码的生成,如:javac命令)、后端编译器(完成代码优化及字节码生成本地机器码的过程,如:即时编译、提前编译都是后端编译器)。:虽然以整个方法作为编译对象,但是执行入口(从方法第几条字节码指令)不同,编译时会传入执行入口点字节码序号。,为了提高效率,则提前编译器编译后提前保存(即时编译缓存),运行时则直接加载使用。a.运行时,即时编译的目标是“热点代码”,有更好的优化;原创 2023-08-16 09:55:04 · 349 阅读 · 0 评论 -
HotSpot虚拟机之字节码执行引擎
2.局部变量表容量以变量槽(slot)为最小单位;3.方法Code属性。原创 2023-08-15 22:39:08 · 337 阅读 · 0 评论 -
HotSpot虚拟机之类加载过程及类加载器
step5:否则,查找失败,则抛出java.lang.NoSuchMethodError;step6:查找成功后,是否对该方法有访问权限,否则抛出:java.lang.IllegalAccessError。接口方法当前代码处在D类,根据未解析的符号引用N去解析方法(方法所属的接口C),步骤如下:step1:首先解析D方法表class_index的索引CONSTANT_Class_info类进行解析(字段所在的类解析),原创 2023-08-13 14:46:57 · 300 阅读 · 0 评论 -
HotSpot虚拟机之Class文件及字节码指令
Class文件格式如下表所示,主要有:常量池、字段表、方法表、属性表等。Class文件、字段、方法都有自己的属性,这些属性存储到属性表(attribute_info),《Java虚拟机规范》允许属性只要不重名,任何编译器都可以添加自己的属性信息。javac编译过程:一个准备(初始化插入式注解处理器);a.i代表int、l代表long、s代表short、b代表byte、c代表char、f代表float、d代表double、(byte、short、char、boolean、int型返回使用ireturn)原创 2023-08-04 20:33:45 · 260 阅读 · 0 评论 -
HotSpot虚拟机参数配置及优化
2.user:进程执行用户态(User Mode)所耗费的处理器时间(此进程实际CPU时间、其他进程和此进程阻塞时间不包括);2.代码根所引用的存活对象,从一个Region迁移到了另外的Region,更新迁移对象的引用。2.Region增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长。1.回收线程的启动时间,该值 = JVM进程启动时间点 - 当前时间点;下图是VisualVM的Visual GC插件的监控图。回收线程的结束时间,该值 = JVM进程启动时间点 - 当前时间点;原创 2023-06-15 20:23:44 · 969 阅读 · 0 评论 -
HotSpot虚拟机垃圾回收算法及收集器
如下表所示,垃圾回收算法总结。算法特点标记-清除1.标记存活的对象,统一回收所有未被标记的对象;2.最基础的收集算法;内存碎片化,大对象分配时没有足够连续空间,则提前触发GC;对象数量增加时,标记和清除两个过程执行效率低4.适用:老年代;5.采用该算法收集器:CMS。标记-复制1.“半区复制”:内存按大小相等分两块(使用一块;存活对象复制到另一块);2.“Appel式回收”:新生代分为一个Eden区、两个Survivor区(每次可用一个Eden区、一个Survivor区;原创 2023-06-07 19:39:30 · 888 阅读 · 0 评论 -
HotSpot虚拟机OutOfMemoryError异常
HotSpot虚拟机把内存分为不同的数据区域,有的区域随JVM启动而一直存在(线程共享区域),有的区域随用户线程启动和结束而建立和销毁(线程私有区域),如下图所示。JVM:-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=128M,如下代码所示。JVM配置:-Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError,如下代码所示。下图所示是堆外内存,由参数-XX:MaxDirectMemorySize决定大小,没有配置该参数时,原创 2023-05-29 20:31:19 · 785 阅读 · 0 评论 -
Java内存模型<二> _ volatile/synchronized/final内存语义
一、volatile的内存语义原创 2022-03-26 22:16:00 · 607 阅读 · 0 评论 -
Java内存模型<一> _ 基础
一、并发编程的关键问题并发编程中,需要处理两个关键问题:线程之间如何通信、如何同步?1. 线程间通信通信是指线程之间以何种机制来交换信息。分为两种通信机制:共享内存和消息传递。在共享内存并发模型里,线程之间有公共状态,通过写-读内存中的公共状态进行隐式通信;在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。2. 线程间同步同步是指程序中用于控制不同线程间操作发生相对顺序的机制。在共享内存并发模型里,程序员...原创 2022-02-28 20:16:13 · 210 阅读 · 0 评论