http://www.oracle.com/technetwork/tutorials/tutorials-1876574.html
待翻译。
一、Java和JVM
1. Java Runtime Environment
下载Java后会得到Java Runtime Environment(JRE)。JRE包括Java Virtual Machine(JVM),Java Platform核心类以及Java平台支持库。这三者是在电脑上运行Java应用所必需的。
2. Java Development Kit
JDK是为开发Java应用的工具集。有了JDK,你就可以编译Java写的应用,并在JVM中运行。并且JDK还提供工具帮助打包和发布应用。
3. Java Virtual Machine
JVM是个抽象的计算机。对要在JVM上执行的程序而言,JVM程序本身即类似一台计算机。每种操作系统都有各自的JVM实现,JVM将Java程序指令翻译成在本地操作系统上运行的指令。由此实现Java的跨平台。
JVM并不能识别Java语言,它只识别class文件格式。class文件包含了Java虚拟机指令(即字节码)和一个符号表及其他辅助信息。
为保证安全,Java虚拟机对class文件内的代码做出了很强的语法和结构限制。除Java意外,任何其他语言,只要它能被表示成合法的class文件,就能被JVM识别处理。
JVM的通用性及独立于机器的平台性,吸引了一些语言的实现者选择使用JVM作为自己语言的虚拟机。
二、JVM架构
1. Hotspot架构
HotSpot JVM的架构为实现高性能和高可扩展性提供坚实基础。例如,HotSpot JVM JIT编译器可以进行动态优化。换句话说,它在Java应用运行时做优化约定,并为底层的系统架构生成高性能的本地机器指令。另外,随着HostSpot JVM运行时环境和多线程垃圾收集器的成熟演变和持续改进,即便在最大的计算机系统上也能提供高可扩展性。
如图所示,JVM的主要组件包括Class Loader, Runtime Data Areas和Execution Engin。
2.Hotspot关键组件
HotSpot JVM中与性能相关的关键组件如下图高亮所示:
有三个组件在调优性能时至关重要。堆(Heap)是对象数据存储所在。此区域由启动时选择的垃圾收集器所管辖。大部分调优选项都与调整堆大小以及选择最符合环境的垃圾收集器相关。JIT编译器也对性能有重要影响,不过新版本的JVM上很少需要调整它。
3. 性能基础要素
通常,调优Java应用时,主要关注两个主要目标之一:响应性(responsiveness)或吞吐量(throughput)
响应性指的是应用或系统多快能响应一个请求数据,例子包括:
- 桌面UI多快能响应一个事件
- 网站多快能返回一个页面
- 一个db查询多快能返回
对于关注响应性的应用,比较大的停顿事件是不可以接受的。应关注的是在多时间段响应。
吞吐量关注最大化应用在一段时间内的作业量。如果衡量吞吐量的例子包括:
- 一段给定时间内完成的事务量
- 一小时内批处理程序完成的任务量
一小时内完成的db查询的数量
关注吞吐量时较大的停顿时间是可以接受的。因为高吞吐量应用关注一段较长时间内的基准,快速响应时间并不作为考量。