随笔分类 - JVM知识汇总
摘要:什么是自旋锁 它是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。 但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申
阅读全文
摘要:Java堆的基本概念 **Java 堆是虚拟机所管理的内存中最大的一块,**是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一作用就是存放对象实例,几乎所有的对象实例都是在这里分配的(不绝对,在虚拟机的优化策略下,也会存在栈上分配、标量替换的情况)。当类加载器读取了类文件后,需要把
阅读全文
摘要:**🌳方法区(Method Area)**并不是所谓的存储方法的区域,而是供各线程共享的运行时内存区域。它存储了已被虚拟机加载的类信息、方法信息、字段信息、常量(final修饰)、静态变量、即时编译器编译后的代码缓存等。 方法区也是一种规范,在不同虚拟机里头实现是不一样的,最典型的实现就是HotS
阅读全文
摘要:1 七种垃圾收集器 Serial(串行GC)—— 标记-复制 ParNew(并行GC)—— 标记-复制 Parallel Scavenge(并行回收GC)—— 标记-复制 Serial Old(MSC)(串行GC)—— 标记-整理 CMS(并发GC)—— 标记-清除 Parallel Old(并行G
阅读全文
摘要:分代回收理论 大多数商业虚拟机的垃圾收集器都遵循“分代收集”的理论设计,它建立在两个分带假说至上: **弱分代假说:**绝对大多数对象都是朝生夕灭的。 强分代假说:熬过越多次垃圾收集过程的 对象就越难以消亡。 这两个分代假说表明了垃圾收集器一致设计的原则:应该将Java堆划分为多个不同的区域,然后根
阅读全文
摘要:执行引擎是 Java 虚拟机最核心的组成部分之一。「虚拟机」是相对于「物理机」的概念,这两种机器都有代码执行的能力,区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机执行引擎是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的
阅读全文
摘要:Java的编译期是一个模糊的概念,需要具体分析。 将 *.java文件转为 *.class的过程称为编译器的前端(前端编译)。例如:JDK的javac编译器。 把字节码( *.class文件) 转变为 本地机器码 的过程称为Java虚拟机的即时编译运行期(JIT编译器,Just In Time)。例
阅读全文
摘要:深入理解Java虚拟机(类文件结构) 我们所编写的每一行代码,要在机器上运行最终都需要编译成二进制的机器码 CPU 才能识别。但是由于虚拟机的存在,屏蔽了操作系统与 CPU 指令集的差异性,类似于 Java 这种建立在虚拟机之上的编程语言通常会编译成一种中间格式的文件Class文件来进行存储。 一.
阅读全文
摘要:目前主流的两款商用Java虚拟机(Hotspot、Open9)里,Java程序最初都是通过解释器(Interpreter)进行解释执行的。在javac编译过后产生的字节码Class文件:源码在编译的过程中,进行「词法分析 → 语法分析 → 生成目标代码」等过程,完成生成字节码文件的工作。然后在后面交
阅读全文
摘要:1. Java虚拟机栈(Java栈) :deciduous_tree: 虚拟机栈也称为Java栈,每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)。 Java虚拟机栈是线程私有的,它的生命周期与线程相同(随线程而生,随线程而灭)。 栈帧包括局部变量表、操作数栈、动态
阅读全文
摘要:🌳 从 Java 虚拟机的角度来讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用 C++ 来实现,是虚拟机自身的一部分;另一种就是所有其他的类加载器,这些类加载器都由 Java 来实现,独立于虚拟机外部,并且全都继承自抽象类 java
阅读全文
摘要:类的加载过程 Java虚拟机中类加载的全过程包括以下5个阶段:point_down: 上图中加载、验证、准备、初始化和卸载 5 个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班的开始注意,这里说的是按部就班的开始,并不要求前一阶段执行完才能进入下一阶段,而解析阶段则不一定:它在某些情况下可
阅读全文
摘要:1. JVM内存区域划分 jvm在运行java应用程序过程中,会把它所管理的内存划分为若干不同的数据区域。 ☝️ 灰色部分(Java栈,本地方法栈和程序计数器)是线程私有,不存在线程安全问题,橙色部分(方法区和堆)为线程共享区。 2. 类加载器 类加载器(Class Loader)负责加载class
阅读全文
摘要:对象的创建 检查对象对应的类是否已被虚拟机加载 当虚拟机遇到new对应的字节码指令时,首先检查这个指令的参数是否能在常量池中找到一个类的符号引用,并检查该引用代表的类是否已被虚拟机加载、解析和初始化。如果没有则执行相应的类加载过程。 虚拟机为新生对象分配内存(对象所需的内存大小在类加载的过程中已经确
阅读全文
摘要:在Ubuntu下编译openjdk11 建议在配置环境的各个环节过程中拍摄快照 在此附上openjdk10/11的源码链接: https://pan.baidu.com/s/15Q6axYE8aViUHSZGF9Iecg 提取码:hnip Ubuntu版本信息 Ubuntu 18.04.4 LTS
阅读全文

浙公网安备 33010602011771号