1.4 Java虚拟机与垃圾回收
前面我们学习了Java程序的编写、编译与运行过程,那么Java程序在计算机中运行的底层原理是什么呢?它是如何实现跨平台的呢?它在运行过程中又是如何使用计算机内存的呢?接下来,我们来学习Java虚拟机与垃圾回收机制。
1.4.1 Java虚拟机JVM
Java虚拟机(Java Virtual Machine,JVM)Java基础编程章节是运行Java程序必不可少的机制。Oracle的Java虚拟机规范给出了JVM的定义:JVM是在一台真实的机器上用软件方式实现的一台假象机。虚拟机的代码存储在.class文件中,并且每个.class文件最多包含一个public class类的代码。
Java程序经过编译器(javac.exe)编译之后,会产生与平台无关的字节码文件(即扩展名为.class的文件)。字节码文件本质上是一种标准化的可移植的二进制格式文件,它最大的好处是可跨平台运行,也就是常说的“一次编译,到处运行”。字节码文件必须交由解释器来执行,与计算机硬件、操作系统没有关系,这个解释程序就是JVM。换句话说,无论使用哪种操作平台,只要其含有JVM,就可以运行字节码文件。事实上,正是有了Java虚拟机规范,才使得Java应用程序达到与平台无关,从而实现可移植性,这也是Java语言风靡全球、迅速普及的原因之一。
回顾之前之前学习的代码编译、运行过程,我们可以很容易地理解到,JVM实现跨平台代码执行的过程如图1.21所示。

图1.21 JVM执行流程图
最后需要强调的是,JVM的实现包括字节码验证、解释器、内存垃圾回收等,Java虚拟机规范对运行时数据区域的划分及字节码的优化并没有严格的限制,它们的实现依不同的平台而有所不同。
1.4.2 垃圾回收机制
在传统的程序开发语言(C、C++及其他语言)中允许动态分配内存,同时需要程序开发人员负责内存资源的释放,如果不释放内存,则随着程序的不断运行,不断有新的资源需要分配内存,当系统中没有内存可用时程序就会崩溃。或者,已动态分配的堆内存由于某种原因未被程序释放或无法释放,也会造成系统内存的浪费。上述这些现象都被称为“内存漏洞”。
垃圾回收(Garbage Collection,GC)就是指释放垃圾对象所占用的空间,防止内存溢出。内存处理是让所有编程人员都很头疼的地方,如果忘记或者错误地回收内存会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象并判断是否超过作用域,从而确定是不是要回收对象。
在Java语言中,引入了垃圾回收机制,程序开发者在编写程序时无须考虑内存管理问题。Java提供了后台系统级线程,自动记录每次内存分配的情况,并统计每个内存地址的引用次数,不定时地对内存中没有被引用或者长时间没有使用的对象进行回收,这样回收的内存资源可以再次分配其他的内存申请。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/18735.html