本系列教程主要讲解Java垃圾回收机制,文章内容是翻译oracle官网的相关文档,有兴趣的同学可以查看官网英文版,具体地址:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html。
本章节内容主要介绍Java技术和JVM。
Java技术和JVM
Java概述
Java是Sun Microsystems在1995年首次发布的编程语言和计算平台。它是支持Java程序的底层及时,包括试用程序、游戏和业务应用程序。Java在全球超过8.5亿的个人电脑上运行,在全球数十亿的设备上,包括移动和电视设备。Java由许多关键组件组成,它们作为一个整体创建Java平台。
Java运行时版本
当你下载Java时,你将获得Java运行时环境(JRE)。JRE有Java虚拟机(JVM)、Java平台核心类和支持Java平台库组成。这三种方法都需要在计算机上运行Java应用程序。在Java 7中,Java应用程序作为桌面应用程序从操作系统运行,作为桌面应用程序,但使用Java Web Start在Web上安装,或者在浏览器中作为Web嵌入应用程序(使用JavaFX)。
Java编程语言
Java是一个面向对象的编程语言,包括以下特性。
- 平台独立性——Java应用程序被编译成字节码,它存储在类文件中,并加载进JVM中。由于应用程序在JVM中运行,所以他们可以在许多不同的操作系统和设备上运行。
- 面向对象的——Java是一种面向对象的语言,它采用了C和C++的许多特性,并改造了它们。
- 自动垃圾收集——Java自动分配和和释放内存,因此,程序无需承担这个任务。
- 丰富的标准库——Java包括大量的预先生成的对象,这些对象可以用于执行诸如输入/输出、网络和日期操作等任务。
Java开发工具包
Java开发工具包(JDK)是开发Java应用程序的工具集。使用JDK,你可以编译用Java编程语言编写的程序,并在JVM中运行它们。此外,JDK还提供了打包和分发应用程序的工具。
JDK和JRE共享Java应用程序编程接口(Java API)。Java API是预打包库的集合,开发人员使用它来创建Java应用程序。Java API通过提供工具来完成许多常见的编程任务,包括字符串操作、日期/时间处理、网络和实现数据结构(例如列表、映射、栈和队列),使开发变得更加容易。
Java虚拟机(JVM)
Java虚拟机(JVM)是一个抽象的计算机器。JVM是一个开起来像一个机器的程序,它的程序写在它里面执行。通过这种方式,Java程序被写入到同一组接口和库中。针对特定操作系统的每个JVM实现,将Java编程指令转换为在本地操作系统上运行的指令和命令。通过这种方式,Java程序就可以实现平台独立性。
Java虚拟机的第一个原型实现是在Sun Microsystems公司完成的,它模拟了一个掌上设备所承载的Java虚拟机指令集,它类似于一个现代的个人数字助理(PDA)。Oracle的当前实现在移动、桌面和服务器设备上模拟Java虚拟机,但是,Java虚拟机不承担任何特定的实现技术、主机硬件或主机操作系统。它不是一个固有的解释,但可以通过将其指令编译成一个硅CPU来实现。它也可以在微代码中或硅中实现。
Java虚拟机对Java编程语言一无所知,它只知道特定的二进制格式,即类文件格式。一个类文件包含Java虚拟机指令(或字节码)和符号表,以及其他辅助信息。
为了安全起见,Java虚拟机对类文件中的代码施加了强大的语法和结构约束。然而,任何可以用有效的类文件表示的功能的语言都可以由Java虚拟来托管。被普遍可用的、机器独立的平台锁吸引,其他语言的实现者可以将Java虚拟机作为其语言的交付工具。
探索JVM体系结构
Hotspot体系结构
Hotspot JVM拥有一个支持强大特性和功能基础的架构,并支持实现高性能和大规模可扩展的能力。例如,Hotspot JVM JIT(Just In Time即时)编译器生成动态优化。换句话说,当Java应用程序运行并生成针对底层系统架构的高性能本地指令时,它们会做出优化决策。此外,通过其运行时环境和多线程垃圾收集器的不断成熟的推进和持续的工程,HotSpot JVM在即使是最大的可用计算机系统上也能获得高的可扩展性。
上图各组件的翻译如下:
- HotSpot JVM: Architecture -->HotSpot JVM: 架构
- Class Files --> 类文件
- Class Loader Subsystem --> 类加载子系统
- Native Internal Threads --> 本地内部线程
- Program Counter Redisters --> 程序计数器寄存器
- Java Threads --> Java线程
- Heap --> 堆
- Method Area --> 方法区
- Native Method Livraries --> 本地方法库
- Native Method Interface --> 本地方法接口
- Garbage Collector --> 垃圾收集器
- JIT Compiler --> 即时编译器
- Execution Engine --> 执行引擎
关键Hotspot组件
与性能相关的JVM关键组件在下图中突出显示。
上图各组件的翻译如下(已有组件不再重复翻译):
- Key HotSpot JVM Components --> 关键HotSpot JVM 组件
- Runtime Data Areas --> 运行时数据区
在性能调优是,JVM重点在三个组件。堆是对象数据存储的地方。然后,该区域由启动时选择的垃圾收集器管理。大多数调优选项都与堆大小有关,并为你的情况选择最合适的垃圾收集器。JIT(即时)编译器对性能也有很大的影响,但很少需要对JVM的新版本进行调优。
性能基础
通常,在Java应用程序调优时,重点是两个主要目标之一:响应性和吞吐量。我们将在教程过程中回顾这些概念。
响应性
响应性指的是应用程序或系统对请求数据进行相应的速度。例子如下:
- 桌面UI对时间的响应有多块
- 网站返回页面的速度有多快
- 返回数据库查询的数据有多快
吞吐量
吞吐量的重点是在特定的时间段内应用程序的处理量最大化。如何测量吞吐量的示例包括:
- 在给定的时间内完成的事务数。
- 批量程序可以在一小时内完成的工作数量。
- 可以在一小时内完成的数据库查询的数量。
本章节到此结束,如有错误或不足之处,希望各位看官不吝赐教。
下一章节主要翻译《描述垃圾收集》部分,感兴趣的同学可以期待一下哦,我尽量不让你们等太久。
第三章链接:Java垃圾回收(GC)系列三 垃圾收集描述