![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java虚拟机
文章平均质量分 94
学习虚拟机
江海i
不积小流,无以成江海。
展开
-
Java虚拟机之内存模型
1. 内存模型 Java内存模型是Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台上都能达到一致的内存访问效果。 简单来说JMM定义了一套在多线程读写共享数据时,对数据可见性、有序性和原子性的规则和保障。 1.1 原子性 synchronized同步关键字。 /** * @Description JMM——原子性 * @date 2022/3/30 8:39 */ public原创 2022-03-30 15:58:22 · 1965 阅读 · 0 评论 -
Java虚拟机之类加载与字节码技术(下)
本来打算两篇结束,晚上实在是学不下去。G 1. 类加载 1.1 加载 将类的字节码载入到方法区中,内存采用C++的instanceKlass描述Java类。 在加载过程主要完成: 通过类的全限定类名来获取定义此类的二进制字节流; 将这个字节流代表的静态存储结构转化为方法区的运行时数据结构; 在内存中生成一个代表整个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。 特点: 如果当前类的父类还没有加载,优先加载父类; 加载和连接过程可能交替运行。 1.2 连接 1..原创 2022-03-29 21:18:51 · 446 阅读 · 0 评论 -
Java虚拟机之类加载与字节码技术(中)
1. 多态原理 从字节码文件中看invokevirtual即是多态实现的原理。 1.1 通过HSDB查看内存情况 代码: /** * @Description 展示多态原理——Invoke virtual * @date 2022/3/28 8:35 */ public class ShowInvokeVirtual { public static void test(Animal animal) { animal.eat(); System.out.pri原创 2022-03-28 20:01:39 · 740 阅读 · 0 评论 -
Java虚拟机之类加载与字节码技术(上)
1. 类文件结构 JVM规范的类文件结构: 字节码对应名称: 1.1 魔数 Class文件的前四个字节称为魔数,用来确定这个文件是否是能被虚拟机接收的Class文件。值为:ca fe ba be 例如: 0000000 ca fe ba be 00 00 00 34 00 32 0a 00 06 00 15 09 1.2 版本 第五、六个字节为小版本号; 第七、八个字节为主版本号。 对应: 例如: 0000000 ca fe ba be 00 00 00 34 00 32 0a 00 06 0原创 2022-03-27 17:31:12 · 338 阅读 · 0 评论 -
Java虚拟机之垃圾回收
1. 判断对象可以被回收 1.1 引用计数法 给对象添加一个引用计数器,每当用一个地方引用它时,计数器加一;当引用失效时,计数器减一,计数器为0的对象就是不可能再被使用的。 存在的弊端:循环引用,如下图中A对象和B对象仅仅只是被彼此引用了,而不会被其它地方所引用,但是存在引用又无法进行回收,这就存在无辜的内存消耗。 1.2 可达性分析算法 通过一系列称为“GC Root” 的对象作为起始点,从这些节点往下找,搜索走过的路程称为引用链,当一个对到GC Roots没有任何引用链时,说明这个对象是不可用的原创 2022-03-26 10:14:54 · 1099 阅读 · 0 评论 -
Java虚拟机之堆、方法区、串池、直接内存。
1. 堆 通过new关键字创建的对象都会使用堆内存。 1.1 堆内存特点 是线程之间共享的,需要考虑线程安全问题; 存在垃圾回收机制。 1.2 堆内存溢出 通过-Xmx参数可以设置堆内存大小。 如下方代码中,会一直创建字符串对象并且将对象添加到list集合中,这样就会使得list对象和被添加到集合里面的字符串对象都有对其的引用,所以不会被垃圾回收,导致对象越来越多最终使得堆空间满了。 /** * @Description 堆内存溢出 * @date 2022/3/17 17:02 */ p原创 2022-03-19 20:42:18 · 228 阅读 · 0 评论 -
Java虚拟机之程序计数器、虚拟机栈和本地方法栈。
1. JVM概念 Java Virtual Machine 即Java运行环境 1.1 JVM优点 跨平台运行的基础; 内存管理机制,垃圾自动回收GC; 数组下标越界检查; 多态 1.2 JVM和JRE、JDK的关系 1.3 JVM组成 2. 内存结构之程序计数器 2.1 定义 Program Counter Register 程序计数器(寄存器),Java代码无法直接执行,需要先将源代码转为二进制字节码即JVM指令,然后交由解释器在转换成机器码后才能有CPU去执行。而程序计数器的作用就是记录原创 2022-03-15 17:55:17 · 1691 阅读 · 0 评论