初识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 ...
JVM是如何实现反射的

JVM是如何实现反射的

简介Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。在...
面试时感觉Java异常很简单,真的是这样吗?

面试时感觉Java异常很简单,真的是这样吗?

异常的基本概念在 Java 语言规范中,所有异常都是 Throwable 类或者其子类的实例。Throwable 有两大直接子类。Throwable 是所有异常的根,java.lang.ThrowableError 是错误,java.lang.ErrorException 是异常,java.lang.Ex...