12、垃圾回收(下)

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

深入拆解Java虚拟机

13、Java内存模型

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

深入拆解Java虚拟机

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

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

深入拆解Java虚拟机

15、Java语法糖与Java编译器

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

深入拆解Java虚拟机

16、即时编译(上)

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

深入拆解Java虚拟机

17、即时编译(下)

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

深入拆解Java虚拟机
123457