博学之,审问之,慎思之,明辨之,笃行之!

导航

2021年9月22日 #

19 - Java字节码(基础篇)

摘要: 在前面的篇章中,有不少同学反馈对 Java 字节码并不是特别熟悉。那么今天我便来系统性地介绍一遍 Java 字节码。 "操作数栈" "局部变量区" "Java 字节码简介" "总结与实践" 操作数栈 我们知道,Java 字节码是 Java 虚拟机所使用的指令集。因此,它与 Java 虚拟机基于栈的计 阅读全文

posted @ 2021-09-22 14:10 PP杰 阅读(377) 评论(0) 推荐(0) 编辑

18 - 即时编译器的中间表达形式

摘要: 在上一章中,我利用了程序控制流图以及伪代码,来展示即时编译器中基于 profile 的优化。不过,这并非实际的优化过程。 1. 中间表达形式(IR) 在编译原理课程中,我们通常将编译器分为前端和后端。其中,前端会对所输入的程序进行词法分析、语法分析、语义分析,然后生成中间表达形式,也就是 IR(In 阅读全文

posted @ 2021-09-22 14:10 PP杰 阅读(206) 评论(0) 推荐(0) 编辑

2021年9月21日 #

16 - 即时编译(上)

摘要: 在专栏的第一篇中,我曾经简单地介绍过即时编译。这是一项用来提升应用程序运行效率的技术。通常而言,代码会先被 Java 虚拟机解释执行,之后反复执行的热点代码则会被即时编译成为机器码,直接运行在底层硬件之上。 今天我们便来详细剖析一下 Java 虚拟机中的即时编译。 分层编译模式 HotSpot 虚拟 阅读全文

posted @ 2021-09-21 22:13 PP杰 阅读(149) 评论(0) 推荐(0) 编辑

17 - 即时编译(下)

摘要: 今天我们来继续讲解 Java 虚拟机中的即时编译。 Profiling 上篇提到,分层编译中的 0 层、2 层和 3 层都会进行 profiling,收集能够反映程序执行状态的数据。其中,最为基础的便是方法的调用次数以及循环回边的执行次数。它们被用于触发即时编译。 此外,0 层和 3 层还会收集用于 阅读全文

posted @ 2021-09-21 22:13 PP杰 阅读(68) 评论(0) 推荐(0) 编辑

15 - Java语法糖与Java编译器

摘要: 在前面的篇章中,我们多次提到了 Java 语法和 Java 字节码的差异之处。这些差异之处都是通过 Java 编译器来协调的。今天我们便来列举一下 Java 编译器的协调工作。 自动装箱与自动拆箱 首先要提到的便是 Java 的自动装箱(auto boxing)和自动拆箱(auto unboxing 阅读全文

posted @ 2021-09-21 17:53 PP杰 阅读(53) 评论(0) 推荐(0) 编辑

14 - Java虚拟机是怎么实现synchronized的?

摘要: 在 Java 程序中,我们可以利用 synchronized 关键字来对程序进行加锁。它既可以用来声明一个 synchronized 代码块,也可以直接标记静态方法或者实例方法。 当声明 synchronized 代码块时,编译而成的字节码将包含 monitorenter 和 monitorexit 阅读全文

posted @ 2021-09-21 17:42 PP杰 阅读(48) 评论(0) 推荐(0) 编辑

13 - Java 内存模型

摘要: 我们先来看一个反常识的例子。 这里我定义了两个共享变量 a 和 b,以及两个方法。第一个方法将局部变量 r2 赋值为 a,然后将共享变量 b 赋值为 1。第二个方法将局部变量 r1 赋值为 b,然后将共享变量 a 赋值为 2。请问(r1,r2)的可能值都有哪些? 在单线程环境下,我们可以先调用第一个 阅读全文

posted @ 2021-09-21 17:23 PP杰 阅读(50) 评论(0) 推荐(0) 编辑

INDEX

摘要: LiJie's Home Page 管理 | Github | Gitee | 我的随笔 《深入拆解 JVM 虚拟机》 《Go 语言设计与实现》 微服务 martinfowler java Doug Lea's Home Page | Java 全栈技术体系 | 老K的Java博客 | 高性能队列— 阅读全文

posted @ 2021-09-21 01:32 PP杰 阅读(48) 评论(0) 推荐(0) 编辑

java 常用工具

摘要: javap OpenJDK 项目 Code Tools:实用小工具集 ASM:Java 字节码框架 javap javap 是一个能够将 class 文件反汇编成人类可读格式的工具。在本专栏中,我们经常借助这个工具来查阅 Java 字节码。 举个例子,在讲解异常处理那一篇中,我曾经展示过这么一段代码 阅读全文

posted @ 2021-09-21 00:27 PP杰 阅读(112) 评论(0) 推荐(0) 编辑

2021年9月16日 #

深入拆解JVM虚拟机

摘要: 深入拆解JVM虚拟机 开篇词 "00 为什么我们要学习 JVM 虚拟机?" 模块一:Java 虚拟机基本原理 "01 Java代码是怎么运行的?" "02 Java 的基本类型" "03 Java虚拟机是如何加载Java类的?" "04 JVM 是如何执行方法调用的?(上)" "05 JVM 是如何 阅读全文

posted @ 2021-09-16 21:04 PP杰 阅读(122) 评论(0) 推荐(0) 编辑