JVM的运行期优化
在部分的商用虚拟机中, Java 程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或者代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的效率,在运行时,虚拟机会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler, JIT 编译器)。
运行时帧栈结构与方法调用
Class文件结构——常量池
文章参考虚拟机规范Chapter 4. The class File Format,这篇文章只说常量池相关部分。常量池中主要存放两大类常量:字面量(Literal)和 符号引用(Symbolic References)。字面量比较接近于 Java 语言层面的常量概念,如文本字符串、声明为 final 的常量值等。而符号引用则属于编译原理方面的概念,包括了下面三类常量:
- 类和接口的全限定名(Full Qualified Name)
- 字段的名称和描述符(Descriptor)
- 方法的名称和描述符
类加载过程与类加载器
为什么short、byte会被提升为int,及基本类型的真实大小
Java中,short 、byte、char 类型的数据在做运算的时候,都会默认提升为 int,如下面的代码,需要将等于号右边的强制转为 short 才可以通过编译。
1 | public static void main(String[] args) { |
为什么两个 short 相加会变成 int,有的解释说,两个 short 相加可能溢出,所以用 int 来接就不会溢出,那这样的话,两个 int 相加岂不应该是 long 类型吗?其实本质的原因要从字节码开始讲起。
本文出现了一些字节码指令,如果想详细查看,请参考Java虚拟机规范 Chapter 6. The Java Virtual Machine Instruction Set
垃圾收集器与内存分配策略
计算机网络——链路层
链路层的主体是在网络适配器中实现的,有时也称为网络接口卡。位于网络适配器核心的是链路层控制器,该控制器通常是一个实现了许多链路层服务(成帧、链路接入、差错检测等)的专用芯片,因此链路层的许多功能是由硬件实现的。
有两种类型的网络链路:点对点链路和广播链路。点对点链路由链路一段的单个发送方和链路另一端的单个接收方组成,如点对点协议(point-to-point protocol,PPP)就是这样的协议。广播链路能够让多个发送和接收结点都连接到相同的、单一的、共享的广播信道上。当任何一个结点传输一个帧时,信道广播该帧,每个其它结点都收到一个副本。广播信道通常用于局域网中。
计算机网络——网络层
转发和路由选择
在网络中的每一台主机和路由器中都有一个网络层部分。网络层为了将分组从一台发送主机移动到另外一台接收主机,需要两个重要功能:
- 转发:当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路。
- 路由选择:当分组从发送方流向接收方时,网络层必须决定这些分组所采取的路由或路径。计算这些路径的算法被称为路由选择算法。
转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。路由选择是指网络范围的过程,以决定分组从源到目的地所采取的的端对端路径,是一种宏观上的策略。
每台路由器都有一张转发表。路由器通过检查到达分组首部字段的值来转发分组,然后使用该值在转发表索引查询该分组的输出链路接口。