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

导航

2021年9月21日 #

16 - 即时编译(上)

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

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

17 - 即时编译(下)

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

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

15 - Java语法糖与Java编译器

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

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

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

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

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

13 - Java 内存模型

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

posted @ 2021-09-21 17:23 PP杰 阅读(54) 评论(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杰 阅读(50) 评论(0) 推荐(0) 编辑

java 常用工具

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

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