16、即时编译(上)

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

深入拆解Java虚拟机

15、Java语法糖与Java编译器

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

深入拆解Java虚拟机

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

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

深入拆解Java虚拟机

13、Java内存模型

我们先来看一个反常识的例子。 1234567891011int a=0, b=0;public void method1() { int r2 = a; b = 1;}public void method2() { ...

深入拆解Java虚拟机

12、垃圾回收(下)

在读博士的时候,我曾经写过一个统计Java对象生命周期的动态分析,并且用它来跑了一些基准测试。 其中一些程序的结果,恰好验证了许多研究人员的假设,即大部分的Java对象只存活一小段时间,而存活下来的小部分Java对象则会存活很长一段时间。 (pmd...

深入拆解Java虚拟机

11、垃圾回收(上)

你应该听说过这么一句话:免费的其实是最贵的。 Java虚拟机的自动内存管理,将原本需要由开发人员手动回收的内存,交给垃圾回收器来自动回收。不过既然是自动机制,肯定没法做到像手动回收那般精准高效[1] ,而且还会带来不少与垃圾回收实现相关的问题。 接下...

深入拆解Java虚拟机
15859606162673