[Java] Java 技术和 JVM 基础
Java 由 Sun 公司在 1995 首次发布,既是一门编程语言,也是一个计算平台。
Java 运行时版本 Java Runtime Edition
当你下载 Java 完时候,你会得到一个 Java Runtime Time(JRE)。JRE 由三部分组成 : JVM,Java 平台的核心类,支持 Java 平台的库。这三部分是执行 Java 应用运行的基础。
Java 编程语言
Java 是一门面向对象的编程语言,包括以下特性:
平台独立 - Java 应用被编译成字节码存储在 .class 文件中,运行在 JVM 里面。由 Java 应用运作在 JVM 里面,所以可以跑在不同的机器、设备上面。
面向对象 - 略
自动垃圾回收 - Java 自动地分配、回收内存空间,应用程序不会被这个问题捆绑。
丰富的标准库 - 略
Java Development Kit
JDK 是一个工具集合,用于开发 Java 应用。利用 JDK,可以编译用 Java 语言编写的程序,并使其运行在 JVM 上。JDK 还提供了打包、分发 Java 应用的工具。
JDK 和 JRE 共享同一个 Java Application Programming Interfaces(Java API)。
Java API 是一个预打包好的库的集合,用于创建 Java 应用。Java API 通过提供许多通用的工具,使得开发变得更容易些。提供的工具可用于处理:字符串操作、时间日期处理、网络编程、数据结构的实现(例如, list, map, stack 和 queue)
Java Virtual Machine
Java Virtual Machine(JVM),是一个抽象的计算机器。JVM 是一个程序,但是对于运行在里面的程序来说,JVM 相似一个机器。Java 程序使用同一套接口和库,各个操作系统的 JVM 实现把 Java 语言指令翻译成当前操作系统的指令命令。这样,Java 程序编可以达到平台无关的目的。
JVM 完全不知道 Java 编程语言,只知道一个特殊的库格式,.class 文件格式。一个 .class 文件包含 JVM 指令或者字节码,一张符号表,以及其他的辅助信息。
JVM 架构
Java 商标归 Oracle 所有,Oracle 在发布的 JRE 包含一个Oracle 的 JVM,名为 HotSpot。下面介绍的是 HotSpot 的架构。
HotSpot 的关键组件
上图中高亮出来三个部分的是 JVM 性能相关的三个关键组件。在进行性能优化时,关注点也在这三个组件上面。
Heap,堆,用于存储对象的数据。
Garbage Collector, 垃圾回收器,用于管理 Heap 区域的内存。JVM 在启动时选择哪一个垃圾回收器。大多数的优化选项,和 Heap 的大小、垃圾回收器的选择有关。
JIT Compiler, 即时编译器,和性能有很大的关系,不过对于新版本的 JVM 很少需要调优。
性能优化基础
通常,对一个 Java 应用进行性能调优时,主要关注两个关键目标中的一个:响应速度或者吞吐量。
响应速度(Responsiveness)
响应速度,是指一个应用或者系统响应一个请求,并提供被请求的数据,需要多久。
例如:
一个桌面程序的 UI 响应一个事件需要多久
一个网站返回一个页面需要多久
返回一个数据库查询需要多久
对于一个关注响应速度的应用来说,长时间的暂停是不可以接受的。这里的焦点在于响应时间应当很短暂。
吞吐量(Throughput)
吞吐量,关注的是在指定一段时间内,让一个应用处理任务的的量尽可能地多。
例如:
在给定时间内,可以完成的交易次数
在一个小时内,可以完成的批处理程序有多少
在一个小时内,可以完成的数据库查询次数有多少。
关注吞吐量的应用,一般可以接受长时间的暂停。由于高吞吐量的应用更关注长时间内的性能变化,所以响应速度不是重点。
参考资料
Java Technology and the JVM, Java Garbage Collection Basics, Oracle