随笔分类 - JVM
阅读《深入理解Java虚拟机》
摘要:1. 引入 在 Java 5.0 之前,在协调对共享对象的访问时可以使用的机制只有 synchronized 和 volatile。Java 5.0 增加了一种新的机制:ReentrantLock。与之前提到过的机制相反,ReentrantLock 并不是一种替代内置加锁的方法,而是当内置加锁机制不
阅读全文
摘要:如果我们把字节码看作是程序语言的一种中间表示形式(Intermediate Representation,IR)的话,那编译器无论在何时、在何种状态下把 Class 文件转换成与本地基础设施(硬件指令集、操作系统)相关的二进制机器码,它都可以视为整个编译过程的后端。 本章中所提及的即时编译器都是特指
阅读全文
摘要:1. 线程安全说明 1.1 定义 笔者认为《Java 并发编程实战(Java Concurrency In Practice)》的作者 Brian Goetz 为“线程安全”做出了一个比较恰当的定义: “当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额
阅读全文
摘要:1. 同步器 1.1 CountDownLatch 当一个或多个线程调用 await() 时,这些线程会阻塞; 其它线程调用 countDown() 会将计数器减 1(调用该方法的线程不会阻塞); 当计数器的值变为 0 时(减少计数),因 await() 阻塞的线程会被唤醒,继续执行。 public
阅读全文
摘要:1. 引入 1.1 进程和线程 【进程】进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 【线程】通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程
阅读全文
摘要:我们知道,线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址、文件 I/O 等),又可以独立调度。目前线程是 Java 里面进行处理器资源调度的最基本单位。 1. 线程的实现 主流的操作系统都提供了线程实现,Java 语言则提
阅读全文
摘要:Java 内存模型是围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的。简单来说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据的可见性、有序性、原子性的规则和保障。 1. 并发编程中的三个问题 1.1 可见性 可见性(Visibility):是指一个线程对共享
阅读全文
摘要:1. 概述 执行引擎是 Java 虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系
阅读全文
摘要:1. 概述 Java 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这个过程被称作虚拟机的「类加载机制」。 与那些在编译时需要进行连接的语言不同,在 Java 语言里面,类型的加载、连接和初始化过程都是在程序运
阅读全文
摘要:1. 概述 在 Java 技术下谈“编译期”而没有具体上下文语境的话,其实是一句很含糊的表述: 因为它可能是指一个前端编译器(叫“编译器的前端”更准确一些)把 *.java 文件转变成 *.class 文件的过程; 也可能是指 Java 虚拟机的即时编译器(常称 JIT 编译器,Just In Ti
阅读全文
摘要:1. 概述 Java 虚拟机的指令由 1 个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的 0~N 个代表此操作所需的参数(称为操作数,Operand)构成。 由于 Java 虚拟机采用“面向操作数栈”而不是“面向寄存器”的架构,所以大多数指令都不包含操作数,只有
阅读全文
摘要:1. 平台无关、语言无关 Java 在刚刚诞生之时曾经提出过一个非常著名的宣传口号“一次编写,到处运行(Write Once,Run Anywhere)”,这句话充分表达了当时软件开发人员对冲破平台界限的渴求。 “与平台无关”的理想最终只有实现在操作系统以上的应用层:Oracle 公司以及其他虚拟机
阅读全文
摘要:1. 前置知识 1.1 根节点枚举 固定可作为 GC Roots 的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,尽管目标明确,但查找过程要做到高效并非一件容易的事情,现在 Java 应用越做越庞大,光是方法区的大小就常有数百上千兆,里面的类、常量等更是恒河
阅读全文
摘要:哪些内存需要回收? 什么时候回收? 如何回收? 1. HotSpot 对象 1.1 对象的创建 Java 是一门面向对象的编程语言,Java 程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个 new 关键字而已,而在虚拟机中,对象(文中讨论的对象
阅读全文
摘要:0. review JVM JVM 是一台执行 Java 字节码的虚拟计算机,它拥有独立的运行机制,其运行的 Java 字节码也未必由 Java 语言编译而成。 Java 虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/编译为对应的平台上的机器指令执行。每一条 Java 指令,Jav
阅读全文
摘要:1. JDK & JRE 2. Java语言与Java虚拟机 3. Java发展的重大事件 4. 虚拟机与Java虚拟机 5. JVM的整体结构 HotSpot VM 是目前市面上高性能虚拟机的代表作之一。 它采用 [解释器] 与 [即时编译器] 并存 的架构。 解释器:保证响应时间。及时对字节码文
阅读全文
