关于即时编译器的那些事

关于即时编译器的那些事

我们在前文学习 Java 是如何执行的这篇文章中有提及即时编译器,这是一项用来提升应用程序运行效率的技术。通常而言,代码会先被 Java 虚拟机解释执行,之后反复执行的热点代码则会被即时编译成为机器码,直接运行在底层硬...
你知道Lombok是如何工作的吗

你知道Lombok是如何工作的吗

在学习本文前,也许你只是用过 Lombok,知道有一些注解可以帮助我们快速开发,但是你是否了解它是怎么工作的,为什么可以产生这样的效果?让我们带着上述问题,开始本文的学习。在前文讲解《Javac编译器》时学习编译器的执...
初识Javac编译器和Java语法糖

初识Javac编译器和Java语法糖

Javac编译器概念《Java虚拟机规范》 中严格定义了 Class 文件格式的各种细节, 可是对如何把 Java 源码编译为Class 文件却描述得相当宽松。这里的 javac 编译器称为前端编译器,其他的前端编译器还有诸如 Eclipse JDT 中的...
你知道为什么要有两个 Survivor吗?关于卡表技术又有多少了解

你知道为什么要有两个 Survivor吗?关于卡表技术又有多少了解

JVM内存分配策略分代收集理论以下内容来源于《深入理解Java虚拟机》一文。分代收集理论实质是一套符合大多数程序运行实际情况的经验法则, 它建立在两个分代假说之上:1、弱分代假说(Weak Generational Hypothesis) : 绝...
聊一聊垃圾收集器

聊一聊垃圾收集器

关于 JVM 垃圾回收内容比较多,本文将继续讲述一下 JVM 发展历程中的各个垃圾收集器,这部分内容大多来源于《深入理解Java虚拟机》一文,没有太多的扩展性内容可以补充,但是为了整个系列的完整性,还是补发一下。Serial 收...
你真的了解垃圾回收吗

你真的了解垃圾回收吗

Java 虚拟机的自动内存管理,将原本需要由开发人员手动回收的内存,交给垃圾回收器来自动回收。因为是自动机制,我们平时不会直接接触,但还是有必要了解与垃圾回收实现相关的问题。下文先从基础开始学习垃圾回收。垃圾回收...
你知道Java是如何创建对象的吗

你知道Java是如何创建对象的吗

快要讲解 Java 垃圾回收机制了,在此之前我们有必要了解一下 Java 对象的内存分配和创建过程。JDK8内存区域Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。如下图所示:Java 对象分配内...
JVM是怎么实现invokedynamic的?

JVM是怎么实现invokedynamic的?

千呼万唤始出来,上一篇文章介绍了那么久的方法句柄,终于来到 invokedynamic 指令讲解了。invokedynamic 是 Java 7 引入的一条新指令,用以支持动态语言的方法调用。具体来说,它将调用点(CallSite)抽象成一个 Java 类,...
关于方法句柄的那些事

关于方法句柄的那些事

前言Java 字节码中与调用相关的指令共有五种。invokestatic:用于调用静态方法。invokespecial:用于调用私有实例方法、构造器,以及使用 super 关键字调用父类的实例方法或构造器,和所实现接口的默认方法。invokevirtual...
HSDB使用详解

HSDB使用详解

之前未接触过 HSDB 工具,在深入学习反射时,研究其源码时需要了解生成的字节码文件,恰巧看到别人使用了 HSDB 工具,因此花时间学习了一番。HSDB(Hotspot Debugger),是一款内置于 SA 中的 GUI 调试工具,可用于调试 JVM ...