0%

概述

java 虚拟机的指令由一个操作码(Opcode)以及零或多个操作数(Operands)组成。其中,操作码是一个字节长度的数字,不同的数字代表不同的操作码。对于操作数而言,一个字节码的数字代表一个操作数。由于 java 虚拟机采用面向操作数栈而不是寄存器的架构,因此,大多数的指令都不包含操作数,只有一个操作码。

在 java 虚拟机的指令集中,大多数的指令都包含了其操作所对应的数据类型信息,在这些指令中,操作码中第一个字母表明了其数据类型:i 代表 int,l 代表 long,s 代表 short,b 代表 byte,c 代表 char,f 代表 float,d 代表 double,a 代表 reference。

由于操作码只占一个字节,所以最多只有 256 个指令,这也决定了 java 虚拟机中只对一些常用的操作提供了有限的类型相关识别指令,对于剩下的部分,java 虚拟机通过类型转换将其他类型转成虚拟机指令支持的类型然而再进行操作。

由于虚拟机指令很多,而且部分指令功能类似,所以本文只介绍部分常用的指令。

阅读全文 »

定义

描述符是 jvm 层次上的概念,针对 class 文件定义而成,主要用来描述字段的数据类型、方法的参数列表(包括数量、类型以及顺序)。

阅读全文 »

前言

java 文件经过编译后会产生 class 文件,这是一个存储字节码的文件,它可以被 java 虚拟机解析并运行。事实上,java 虚拟机并不是只能解析 java 语言编译产生的 class 文件,它也可以解析其他语言产生的 class 文件,事实上,java 虚拟机是一种语言无关的平台,只要 class 文件满足 java 虚拟机特定的语法和结构化约束,就能在 java 虚拟机解析运行。

阅读全文 »

前言

字符串匹配算法是常见的一种字符串操作,其是在一个主字符串中查找一个子字符串(也叫模式串),即判断模式串是否是主字符串的一个子串。最简单的做法是两个循环分别比较每个字符,直到找到匹配的位置或遍历结束。这种做法需要消耗 O(m * n) (m 表示主字符串的长度,n 表示模式串的长度) 的时间复杂度。而 KMP 算法则可以通过跳过一些重复的比较过程将时间复杂度控制在 O(m + n) (m 表示主字符串的长度,n 表示模式串的长度)。

阅读全文 »

概述

循环作为程序中经常使用的语句,在java5之后推出了新的for/in(foreach)循环方式以方便程序员编写(阅读)代码。这种方式并不是新的语法,只是语法糖。即编写的foreach循环的代码并不是直接转成字节码,而是由编译器先转成对应的语法,然后再转成字节码,可以理解成是编译器对一些语法的封装提供的另一种方便阅读编写功能代码的实现方式。java中提供的foreach语法糖其底层实现方式主要有两种:对于集合类或实现迭代器的集合使用迭代器的遍历方式,对于数组集合使用数组的遍历方法。

阅读全文 »

概述

当需要将一个对象进行持久化时,除了保存到数据库或写入到文件之外,java中还提供了一种“轻量级”的方式:序列化。java的对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列完全恢复为原来的对象,这个恢复过程称为反序列化。

阅读全文 »

定义

代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。
                                                                                                                ——《Head First 设计模式》

其实代理对象就是一个“中介”的形式,代理对象封装了目标对象,提供跟目标对象相同的接口,目标对象不直接对外暴露接口,一切操作都是代理对象进行调用的。而客户端只会看到代理对象提供的接口。整个调用过程如下:客户端调用代理对象的方法—->代理对象调用目标对象的方法—->目标对象方法执行并将返回值传给代理对象—->代理对象将目标对象的返回值传给客户端。

阅读全文 »

前言

GC日志是分析性能问题的重要工具,通过查看GC日志可以对问题的解决方法有一个大致的方向。GC日志随着使用垃圾回收器的不同而有所差别,但是大致内容是相同的。本文主要以Serial垃圾回收器的GC日志进行说明。

阅读全文 »

定义

状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
                                                                                                                ——《Head First 设计模式》

这个定义看起来晦涩难懂,其实就是把有限状态自动机中各个状态定义由一个基本数据类型变成状态类,再把对外提供的改变状态的方法中的一堆 if 条件分解到状态类中实现。

阅读全文 »