深入探索Java工作原理:JVM,内存回收及其他
Java语言引入了Java虚拟机,具有跨平台运行的功能,能够很好地适应各种Web应用。同时,为了提高Java语言的性能和健壮性,还引入了如垃圾回收机制等新功能,通过这些改进让Java具有其独特的工作原理。
1.Java虚拟机
Java虚拟机(Java Virtual Machine,JVM)是软件模拟的计算机,它可以在任何处理器上(无论是在计算机中还是在其他电子设备中)安全兼容地执行保存在.class文件中的字节码。Java虚拟机的“机器码”保存在.class文件中,有时也可以称之为字节码文件。
Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。因此在运行时,Java源程序需要通过编译器编译成为.class文件。
Java虚拟机的建立需要针对不同的软硬件平台来实现,既要考虑处理器的型号,也要考虑操作系统的种类。由此在SPARC结构、X86结构、MIPS和PPC等嵌入式处理芯片上,在UNIX、Linux、Windows和部分实时操作系统上都可实现Java虚拟机。
2.无用内存自动回收机制
在程序的执行过程中,部分内存在使用过后就处于废弃状态,如果不及时进行回收,很有可能会导致内存泄漏,进而引发系统崩溃。在C 语言中是由程序员进行内存回收的,程序员需要在编写程序时把不再使用的对象内存释放掉,这种人为管理内存释放的方法往往由于程序员的疏忽而致使内存无法回 收,同时也增加了程序员的工作量。而在Java运行环境中,始终存在着一个系统级的线程,专门跟踪内存的使用情况,定期检测出不再使用的内存,并自动进行回收,避免了内存的泄露,也减轻了程序员的工作量。
3.代码安全性检查机制
安全和方便总是相对矛盾的。Java编程语言的出现使得客户端计算机可以方便地从网络上上传或下载Java程序到本地计算机上运行,但是如何保证该Java程序不携带病毒或者没有其他危险目的呢?为了确保Java程序执行的安全性,Java语言通过Applet程序来控制非法程序的安全性,也就是有了它才确保Java语言的生存。
Java字节码的执行需要经过以下3个步骤:
(1)由类装载器(class loader)负责把类文件(.class文件)加载到Java虚拟机中。在此过程需要检验该类文件是否符合类文件规范。
(2)字节码校验器(bytecode verifier)检查该类文件的代码中是否存在着某些非法操作,例如Applet程序中写本地计算机文件系统的操作。
(3)如果字节码校验器检验通过,由Java解释器负责把该类文件解释成为机器码进行执行。
注意:
Java虚拟机采用“沙箱”运行模式,即把Java程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间以外的内存。如果是Applet程序,还不允许访问客户端机器的文件系统。
Java的运行环境
无论哪种语言都需要有它特定的运行环境,也就是平台。Java语言同样不例外。但是如何理解Java程序与硬件环境无关呢?
几乎所有的语言都需要通过编译或者解释才可以被计算机执行,但是Java有一点不同,它同时需要这两个过程。其实,也正是因为这个原因才使Java这种语言具有了平台无关性。当完成一个Java源程序后,首先,通过Java翻译程序将它编译成一种叫做字节码的中间代码,然后再由Java平台的解释器将它转换成为机器语言来执行,这一平台的核心就是JVM。
Java的编译过程与其他的语言不同。像C 这样的语言,在编译时它是与计算机的硬件平台信息密不可分的。编译程序通过查表将所有指令的操作数和操作码等转换成内存的偏移量,即程序运行时的内存分配方式,目的是保证程序正常运行。而Java却是将指令转换成为一种.class的文件,这种文件不包含硬件的信息,需要执行时只要经过安装有JVM的机器进行解释,创建内存分配后再通过查表来确定一条指令所在的地址。这样就有效地保证了Java的可移植性和安全性。
Java平台具有这样的特性和它的结构有关。通常一个程序运行的平台是一个硬件或者软件运行的环境,目前比较流行的是Windows XP、Linux、Solaris和MacOS。Java的平台不太一样,它由两个部分组成,即JVM和应用程序设计接口。
1.JVM
JVM是Java平台的核心,为了让编译产生的字节码能更好地解释与执行,因此把JVM分成了6个部分:JVM解释器、指令系统、寄存器、栈、存储区和碎片回收区。
◆JVM解释器:即这个虚拟机处理字段码的CPU。
◆JVM指令系统:该系统与计算机很相似,一条指令由操作码和操作数两部分组成。操作码为8位二进制数,主要是为了说明一条指令的功能,操作数可以根据需要而定,JVM有多达256种不同的操作指令。
◆寄存器:JVM有自己的虚拟寄存器,这样就可以快速地与JVM的解释器进行数据交换。为了功能的需要,JVM设置了4个常用的32位寄存器:pc(程序 计数器)、optop(操作数栈顶指针)、frame(当前执行环境指针)和vars(指向当前执行环境中第一个局部变量的指针)。
◆JVM栈:指令执行时数据和信息存储的场所和控制中心,它提供给JVM解释器运算所需要的信息。
◆存储区:JVM存储区用于存储编译过后的字节码等信息。
◆碎片回收区:JVM碎片回收是指将使用过的Java类的具体实例从内存进行回收,这就使得开发人员免去了自己编程控制内存的麻烦和危险。随着JVM的不断升级,其碎片回收的技术和算法也更加合理。JVM 1.4.1版后产生了一种叫分代收集技术,简单来说就是利用对象在程序中生存的时间划分成代,以此为标准进行碎片回收。
2.Java应用程序设计接口
Java Application Programming Interface简称Java API,其中文名为Java应用程序设计接口。它是一个软件集合,其中有许多开发时所需要的控件,可以用它来辅助开发。
Java API和JVM构成了Java运行的基本环境,这两种软件整合在一起处于计算机之上,通过这两种软件,Java平台把一个Java应用程序从硬件系统分离开,从而很好地保证了程序的独立性。为了更好地适应开发的需要,Java的设计者们提供了3种版本的Java平台:Java 2 Micro Edition (J2ME )、Java 2 Standard Edition(J2SE)和 Java 2 Enterprise Edition (J2EE),每一种版本都提供了丰富的开发工具以适应不同的开发需要。
分享到:
相关推荐
深入探索 JVM 垃圾回收:ARM 服务器垃圾回收的挑战和优化 JVM 垃圾回收是 Java 内存管理的重要组成部分,其主要职责是自动释放不再被应用程序使用的内存。在现代计算机系统中,内存是一种宝贵的资源,其有效管理...
《深入JVM内核—原理、诊断与优化》是一份深度探索Java虚拟机(JVM)的视频教程,旨在帮助开发者全面理解JVM的工作机制,掌握性能诊断技巧,并能进行有效的优化。本教程覆盖了从基础到高级的JVM主题,不仅适用于Java...
3. **健壮性**:Java在编译时会进行类型检查,运行时有垃圾回收机制,有助于避免内存泄漏和其他一些常见的编程错误。 4. **安全性**:Java提供了一个安全管理器,可以用于定义每个Java应用程序的访问权限。 5. **...
《JAVA8虚拟机(jvm)规范_Chinese version》提供了关于JVM的详细中文指南,对于理解Java程序的运行机制、优化性能以及深入学习Java技术体系至关重要。下面我们将探讨一些重要的JVM知识点: 1. **内存模型**:JVM内存...
本教程旨在帮助开发者深入了解JVM的工作原理及其内部机制,掌握JVM调优的方法和技术。通过学习本教程,开发者不仅能够提高自己的技术水平,还能更好地应对实际工作中遇到的问题。希望各位能够在学习过程中不断探索、...
本教程将带你探索JVM的奥秘,从内存管理到垃圾回收,从编译优化到故障排查,全方位解析JVM的工作机制。 一、JVM结构与原理 1. 类装载子系统:负责加载、验证、解析和初始化类文件。 2. 运行时数据区:包括堆、方法...
《深入理解JVM性能调优和内存模型,垃圾回收,虚拟机原理,经典视频教程》是一套详尽的教育资源,旨在帮助Java开发者深入探索Java虚拟机(JVM)的内部工作机制,提升性能优化的能力。本教程共包含110讲,内容丰富,适合...
本项目“jvmjava”是一个开源项目,由Java语言实现,目的是为了让开发者能够更深入地理解JVM的工作原理,并提供了一个动手实践的机会。 一、JVM概述 Java虚拟机(JVM)是Java平台的核心,它负责执行字节码,提供了...
《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》是一本针对Java开发者深入解析Java虚拟机(JVM)的权威指南。这本书涵盖了JVM的多个核心概念,包括内存管理、类加载机制、字节码执行、性能优化以及异常处理...
《深入理解JVM》这份资料主要探讨了Java虚拟机(JVM)的各个方面,包括其工作原理、内存管理、性能优化以及与编程实践的结合。以下是对这些知识点的详细阐述: 1. **JVM概述**:Java虚拟机是Java平台的核心组成部分...
《深入了解JVM(Inside Java Virtual Machine)》是一篇深度探讨Java虚拟机的博客文章,作者通过分享自己的理解和实践,帮助读者揭开JVM的神秘面纱。这篇文章主要涵盖了以下几个关键知识点: 1. **JVM概述**:Java...
《深入理解Java虚拟机_JVM高级特性与最佳实践 第2版》是一本专注于Java开发者深入探索JVM(Java Virtual Machine)的重要参考资料。本书全面讲解了Java虚拟机的内部工作机制,涵盖了JVM的高级特性和最佳实践,旨在...
《深入理解Java虚拟机:JVM高级特性与最佳实践》是Java开发者深入探索JVM的必备书籍,尤其对于想要在Java领域进一步提升的程序员来说,它提供了丰富的理论基础和实践经验。这本书的第二版更是对原有的内容进行了更新...
在这个解密JVM-day04的学习资源中,我们将探索更深层次的JVM内部机制,包括内存管理、类加载机制、性能优化以及垃圾回收等方面。 1. **内存管理**:JVM内存主要分为堆内存和栈内存。堆内存用于存储对象实例,而栈...
本文档的主要目标是研究Java虚拟机(JVM)的工作原理及其设计背后的原因,而非深入探讨Java语言本身。我们将关注于机器如何运作,并且更重要的是,探究JVM开发者为何选择特定的方式来设计这些功能。 #### 为什么...
### JVM参数配置详解 #### 一、理解JVM参数配置的重要性 Java Virtual Machine (JVM) 是运行Java程序的核心环境,其性能...希望本文能为读者提供一个深入理解JVM参数配置的起点,引导大家探索更高级的性能优化技术。
Java虚拟机(JVM)是Java编程语言的核心...通过深入学习这个视频教程,你将能够全面了解JVM的工作原理,更好地利用Java平台的优势,写出高效、稳定的代码。记得结合实践,理论与实战相结合,才能真正掌握JVM的精髓。
《深入JAVA虚拟机原代码》是一本专注于Java虚拟机(JVM)内部工作原理的书籍,旨在帮助开发者深入了解Java程序的运行机制。JVM是Java平台的核心组成部分,它负责执行字节码,提供了跨平台的运行环境。通过探索JVM的...
这份光盘的资料能够帮助你深入理解JVM的工作原理、内存管理、性能优化以及相关的调试技巧。 1. **JVM结构与工作原理**:JVM由类装载器、运行时数据区、执行引擎、本地方法接口和本地库组成。了解这些组件如何协同...