![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 96
贝克街的流浪猫
公众号: 贝贝猫技术分享
展开
-
JVM 简介
引言本系列文章整理了 JVM 相关的知识,本文作为开篇简单地介绍一下 JVM 的组成和结构。简介所谓虚拟机,就是一台虚拟的计算机,它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统级虚拟机和程序虚拟机。前者有 Visual Box 等,是对真实物理计算机的仿真,提供一个完整的可运行操作系统的平台。而后者则专门为执行单个计算机程序设计,在 Java 虚拟机中执行的指令被称为 Java 字节码指令。Java 程序可以通过 Java 虚拟机运行于各大主流体系结构的平台上,它以虚拟机为原创 2021-04-04 12:36:09 · 253 阅读 · 0 评论 -
JVM GC
引言前面我们已经在整体上简单地介绍了一下 JVM 组成部分,本文着重介绍其中 GC 相关的内容。垃圾回收相信在前面的 JVM 基本结构中,大家已经认识到了 JVM 中内存的结构,即方法区,堆,Java 栈,本地方法栈,PC 计数器,这些是由 JVM 维护的供 Java 程序使用的内存,我们称之为运行时数据区。除此之外,还有 JVM 自身要使用的内存,如执行引擎和本地库接口使用的内存,这些是在运行时数据区之外的。而我们接下来要谈论的垃圾回收,主要的回收目标就是堆空间。而这里所说的垃圾,特指内存中不原创 2021-04-04 12:35:59 · 235 阅读 · 0 评论 -
JVM 线程模型
引言本文着重介绍 JVM 线程模型相关的内容。线程模型我们知道,线程是比进程更轻量级的调度执行单元,而主流的操作系统都提供了线程的实现,Java 语言则提供了不同硬件和操作系统平台下对线程操作的统一抽象,每个执行了 start 函数且未结束的 java.lang.Thread 类实例就代表了一个线程。要想实现线程,主要有 3 种方式:使用内核线程实现、使用用户线程实现、使用用户线程加轻量级进程混合实现。可选方案使用内核线程实现内核线程(Kernel-Level Thread, KLT)就是直接原创 2021-04-04 12:35:52 · 941 阅读 · 1 评论 -
JVM Synchronized 锁实现
引言本文着重介绍 JVM 中 synchronized 锁相关的内容。锁锁是多线程软件开发的必要工具之一, 它的基本作用是保护临界区资源不会被多个线程同时访问而受到破坏。如果由于多线程访问造成对象数据的不一致, 那么系统运行将会得到错误的结果。通过锁, 可以让多个线程排队, 一个一个地进入临界区访问目标对象, 使目标对象的状态总是保持一致, 这也就是锁存在的价值。在 Java 中存在两种实现同步的语义,synchronized 方法和 synchronized 代码块:public class原创 2021-04-04 12:35:46 · 290 阅读 · 1 评论 -
JVM Class 文件结构
引言本文着重介绍 JVM 中 Class 文件相关的内容。Class 文件结构众所周知,Java 虚拟机提供了 Java 语言的跨平台能力,使同一份 Java 代码可以运行在不同的平台上。除此之外,JVM 作为一个平台,还提供了跨语言特性,从理论上说,无论是哪种语言编写的程序,只要能够编译成 Class 文件,就能通过 JVM 运行在各种平台之上。而实现这一特性的关键,就是统一而强大的 Class 文件结构,它是异构语言与 JVM 之间的重要桥梁。当前,诸如 Groovy、Scala、Jython(原创 2021-04-03 14:19:05 · 165 阅读 · 0 评论 -
JVM 字节码技术
引言本文是 JVM Class 文件介绍的延伸部分。字节码技术读到这,大家应该已经对 Class 文件字节码的结构有了比较清晰的理解。接下来,我们顺带着提一下字节码增强的相关技术。字节码增强技术就是一类对现有字节码进行修改或者动态生成全新字节码文件的技术,一般用来实现面向切面编程 AOP。要想使用字节码增强技术,可以选择的类库有很多。我们接下来将主要介绍一下 ASM 和 Javassist。ASM对于需要手动操纵字节码的需求,可以使用 ASM,它可以直接生产 .class 字节码文件,也可以在原创 2021-04-03 14:18:58 · 186 阅读 · 0 评论 -
JVM 类加载
引言本文着重介绍 JVM 中类加载相关的内容。类加载机制类装载流程Class 通常以文件的形式存在,当然也可以是任何二进制流,只有被 Java 虚拟机装载的 Class 才能被程序使用。系统装载 Class 可以分为加载,连接和初始化这 3 个步骤。加载Class 只有在必须要使用的时候才会被装载, Java 虚拟机不会无条件地装载 Class 类型。Java 虚拟机规定, 一个类或接口在初次使用前, 必须要进行初始化。这里指的“使用”, 是指主动使用, 主动使用只有下列几种情况:当创建一原创 2021-04-03 14:18:52 · 214 阅读 · 0 评论 -
JVM 执行引擎
引言本文着重介绍 JVM 中字节码执行引擎相关的内容。字节码执行Java 字节码对于虚拟机,就好像汇编语言对于计算机一样,属于基本执行指令。每一个 Java 字节码指令都有一个 byte 数字与之对应,并且有一个对应的助记符。目前所有的字节码指令大约有 200 余个。下面列举了部分字节码及其对应的助记符:0x00 nop // None0x01 aconst_null // 将 null 推送至栈顶0x02 iconst_m1 // 将 int 型 -1原创 2021-04-03 14:18:26 · 186 阅读 · 0 评论