求阙厅

春有百花秋有月,夏有凉风冬有雪。若无闲事挂心头,便是人间好时节。

JVM 系列 编译器

开启JVM探索新篇章

编译期与编译器 Java语言的编译期可分为: 前端编译器把.java文件转变为.class文件的过程(Javac\ECJ) 虚拟机的后端运行时编译器(JIT编译器,Hotspot的C1\C2编译器)把字节码转化为机器码的过程 静态提前编译器(AOT编译器)直接把*.java文件编译为本地机器代码的过程 Javac这类编译器对代码的运行效率几乎没有任何优化措施,但做了许多...

JVM 系列 执行引擎

开启JVM探索新篇章

在不同的虚拟机实现中,执行引擎在执行Java代码时可能会有解释执行(通过解析器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备 运行时栈帧结构 栈帧存放了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每个方法从调用开始到执行完成的过程,都对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。 局部变量表 是一组变量值存储空间,用于存放方法参数和方...

JVM 系列 类文件结构

开启JVM探索新篇章

虚拟机提供商发布了许多可以运行在各种不同平台的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码, 从而实现程序的“一次编译,到处运行”。虚拟机和字节码存储格式是构成平台无关性和语言无关性的基石。 编译方式 编译成二进制本地机器码 编译成与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式 文件 Class 文件是一组以8位字节为基础单位的...

设计模式 系列 代理

开启 设计模式 探索新篇章

代理模式为其他对象提供一种代理以控制对这个对象的访问。静态代理其实就是设计模式中的经典代理模式。动态代理基于经典代理模式,避免了 Proxy 角色的 class 在系统中冗杂的问题 静态代理 Subject 定义了 RealSubject 和 Proxy 的公共接口,这样就在任何使用 RealSubject 的地方都可以使用 Proxy。 1 2 3 abstract cl...

JVM 系列 反射机制

开启JVM探索新篇章

摘自:知乎 反射(Reflection) 是 Java 程序语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。通过反射机制,可以在运行时访问 Java 对象的属性,方法,构造方法等。 应用场景 开发通用框架 - 反射最重要的用途就是开发各种通用框架。很多框架(比如 Spring)都是配置化的(比如通过 XML 文件配置 Ja...

JVM 系列 类加载机制

开启JVM探索新篇章

推荐:CSDN Java 提供了很多服务提供者接口(Service Provider Interface,SPI),允许第三方为这些接口提供实现。常见的 SPI 有 JDBC、JCE、JNDI、JAXP 和 JBI 等。 这些 SPI 的接口由 Java 核心库来提供,而这些 SPI 的实现代码则是作为 Java 应用所依赖的 jar 包被包含进类路径(CLASSPATH)里。SPI接口...

JVM 系列 ClassNotFoundException与NoClassDefException

开启JVM探索新篇章

ClassNotFoundException 和 NoClassDefFoundError 都发生在 JVM 在 classpath 下找不到所需的类时。 ClassNotFoundException ClassNotFoundException 是一个运行时异常。从类继承层次上来看,ClassNotFoundException 是从Exception继承的,所以 Class...

JVM 系列 引用类型

开启JVM探索新篇章

JDK 1.2 之后,Java 对引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种,这 4 种引用强度依次逐渐减弱。 强引用 软引用 软引用是Java中提供的一种比较适合于缓存场景的应用(只有在内存不够用的情况下才会被GC) 弱引用 在GC时一定会被GC回收 虚引用 由于虚引用只是用来得知对象是否被GC

JVM 系列 内存管理之内存区域

开启JVM探索新篇章

class 文件常量池 class 文件常量池是指编译生成的 class 字节码文件结构中的一个常量池(Constant Pool Table),用于存放编译期间生成的各种字面量和符号引用,这部分内容将在类加载后,存放于方法区的运行时常量池。 字面量: 字符串字面量和声明为 final 的常量值(基本数据类型) 字符串字面量除了类中所有双引号括起来的字符串(包括方法体内的...

JVM 系列 垃圾收集算法

开启JVM探索新篇章

算法 新生代收集算法 使用 标记-复制收集 算法来回收新生代。将内存分为一块较大的eden空间和两块较小的 survivor 空间,每次使用eden和其中一个survivor空间。当回收时,将eden和survivor中还存活着的对象一次性的复制到另外一块 survivor 空间上,最后清理掉 eden 和刚才用过的 survivor 空间。 Hotspot 虚拟机默认的 eden 和...