JVM
PitBXu
看山是山,看山不是山,看山还是山
展开
-
JVM_05 运行时数据区与指令集
JVM Runtime data area and JVM instructions <previous next> 一、Java 内存布局 图 1 java 内存布局 PC 线程私有 program counter , 保存下一条指令的位置。 PC 是唯一不会发生 OOM 的内存区域。 虚拟机执行的过程类似于以下的伪代码: while (not end) { get from pc; get 对应位置指令; 执行该指令; pc ++; } JVM Stack 线程私.原创 2020-08-31 20:26:11 · 194 阅读 · 0 评论 -
JVM_04 指令重排序原则
< previous next > 一、Java 8 大原子操作(目前这种说法已弃用) 参考资料 《深入理解java虚拟机》page: 364 指令 作用区 解释 lock 主内存 标识变量为线程独占 unlock 主内存 解锁 read 主内存 读到工作内存 write 主内存 写到主内存 load 工作内存 read后的值放到线程本地变量副本 store 工作内存 存储值到主内存给 write 备用 use 工作内存 传值给执行引擎 ass.原创 2020-08-13 20:05:29 · 533 阅读 · 0 评论 -
JVM_03 CPU的乱序执行
上次我们提到了JVM为了安全推出的 双亲委派机制 那么双亲委派机制可能被打破吗? 可以,那么如何打破呢? ClassLoader.loadClass 方法定义了类加载的双亲委派机制,重写该方法即可跳出双亲委派。 历史上出现过几次双亲委派被破坏的案例 JDK 1.2 之前,想自己实现类的加载必须重写 loanClass 方法。 Thread.ContextClassLoader 中的线程上下文加载器,不是按照双亲委派机制运行的。 热启动、热部署等场景,每一个 WebApplication 都有自己的 C.原创 2020-08-05 21:58:48 · 466 阅读 · 0 评论 -
JVM_02 类加载机制
JVM 类加载步骤 loading - 装载 linking - 链接 verification - 验证 preparation - 准备 resolution - 解析 intializing - 初始化 装载 1. 通过一个类的 全限定名 来获取定义此类的 二进制字节流 2. 将这个字节流所代表的 静态存储结构 转化为 方法区的 运行时数据结构 3. 在 Java 堆中生成一个代表这个类的 java.lang.Class 对象,作为方法区访问这些数据的入口。 验证: 检查载入Cla原创 2020-08-03 22:20:41 · 167 阅读 · 0 评论 -
JVM_01 Class文件格式
JVM 知识体系 图1 jvm 结构 问题1: Java 是编译执行的还是解释执行的? 解释 + 热点代码编译 执行 (混合执行) **解析:**其实 JVM 主要对 class 文件中的字节码使用 字节码解释器 进行解释并执行。但是当某一方法调用次数达到即时编译定义的阈值时,就会触发即时编译,这时即时编译器会将IR进行优化,并生成这个方法的机器码,后面再调用这个方法,就会直接调用机器码执行 相关参数: -Xmixed 混合执行 -Xint 解释执行模式 -Xcomp 编译执行模式 图2 j...原创 2020-08-03 20:51:08 · 163 阅读 · 0 评论 -
JVM类加载机制
java 类加载机制 1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java...原创 2019-03-25 10:33:40 · 140 阅读 · 0 评论