java

位置:IT落伍者 >> java >> 浏览文章

深入探索Java工作原理:JVM,内存回收及其他


发布日期:2020年08月14日
 
深入探索Java工作原理:JVM,内存回收及其他

Java语言引入了Java虚拟机具有跨平台运行的功能能够很好地适应各种Web应用同时为了提高Java语言的性能和健壮性还引入了如垃圾回收机制等新功能通过这些改进让Java具有其独特的工作原理

.Java虚拟机

Java虚拟机(Java Virtual MachineJVM)是软件模拟的计算机它可以在任何处理器上(无论是在计算机中还是在其他电子设备中)安全兼容地执行保存在class文件中的字节码Java虚拟机的机器码保存在class文件中有时也可以称之为字节码文件

Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行因此在运行时Java源程序需要通过编译器编译成为class文件

Java虚拟机的建立需要针对不同的软硬件平台来实现既要考虑处理器的型号也要考虑操作系统的种类由此在SPARC结构X结构MIPS和PPC等嵌入式处理芯片上在UNIXLinuxWindows和部分实时操作系统上都可实现Java虚拟机

.无用内存自动回收机制

在程序的执行过程中部分内存在使用过后就处于废弃状态如果不及时进行回收很有可能会导致内存洩漏进而引发系统崩溃在C++语言中是由程序员进行内存回收的程序员需要在编写程序时把不再使用的对象内存释放掉这种人为管理内存释放的方法往往由于程序员的疏忽而致使内存无法回收同时也增加了程序员的工作量而在Java运行环境中始终存在着一个系统级的线程专门跟蹤内存的使用情况定期检测出不再使用的内存并自动进行回收避免了内存的洩露也减轻了程序员的工作量

.代码安全性检查机制

安全和方便总是相对矛盾的Java编程语言的出现使得客户端计算机可以方便地从网络上上传或下载Java程序到本地计算机上运行但是如何保证该Java程序不携带病毒或者没有其他危险目的呢?为了确保Java程序执行的安全性Java语言通过Applet程序来控制非法程序的安全性也就是有了它才确保Java语言的生存

Java字节码的执行需要经过以下个步骤

)由类装载器(class loader)负责把类文件(class文件)加载到Java虚拟机中在此过程需要检验该类文件是否符合类文件规范

)字节码校验器(bytecode verifier)检查该类文件的代码中是否存在着某些非法操作例如Applet程序中写本地计算机文件系统的操作

)如果字节码校验器检验通过由Java解释器负责把该类文件解释成为机器码进行执行

注意

Java虚拟机采用沙箱运行模式即把Java程序的代码和数据都限制在一定内存空间里执行不允许程序访问该内存空间以外的内存如果是Applet程序还不允许访问客户端机器的文件系统

Java的运行环境

无论哪种语言都需要有它特定的运行环境也就是平台Java语言同样不例外但是如何理解Java程序与硬件环境无关呢?

几乎所有的语言都需要通过编译或者解释才可以被计算机执行但是Java有一点不同它同时需要这两个过程其实也正是因为这个原因才使Java这种语言具有了平台无关性当完成一个Java源程序后首先通过Java翻译程序将它编译成一种叫做字节码的中间代码然后再由Java平台的解释器将它转换成为机器语言来执行这一平台的核心就是JVM

Java的编译过程与其他的语言不同像C++这样的语言在编译时它是与计算机的硬件平台信息密不可分的编译程序通过查表将所有指令的操作数和操作码等转换成内存的偏移量即程序运行时的内存分配方式目的是保证程序正常运行而Java却是将指令转换成为一种class的文件这种文件不包含硬件的信息需要执行时只要经过安装有JVM的机器进行解释创建内存分配后再通过查表来确定一条指令所在的地址这样就有效地保证了Java的可移植性和安全性

Java平台具有这样的特性和它的结构有关通常一个程序运行的平台是一个硬件或者软件运行的环境目前比较流行的是Windows XPLinuxSolaris和MacOSJava的平台不太一样它由两个部分组成即JVM和应用程序设计接口

.JVM

JVM是Java平台的核心为了让编译产生的字节码能更好地解释与执行因此把JVM分成了个部分JVM解释器指令系统寄存器存储区和碎片回收区

◆JVM解释器即这个虚拟机处理字段码的CPU

◆JVM指令系统该系统与计算机很相似一条指令由操作码和操作数两部分组成操作码为位二进制数主要是为了说明一条指令的功能操作数可以根据需要而定JVM有多达种不同的操作指令

◆寄存器JVM有自己的虚拟寄存器这样就可以快速地与JVM的解释器进行数据交换为了功能的需要JVM设置了个常用的位寄存器pc(程序计数器)optop(操作数栈顶指针)frame(当前执行环境指针)和vars(指向当前执行环境中第一个局部变量的指针)

◆JVM栈指令执行时数据和信息存储的场所和控制中心它提供给JVM解释器运算所需要的信息

◆存储区JVM存储区用于存储编译过后的字节码等信息

◆碎片回收区JVM碎片回收是指将使用过的Java类的具体实例从内存进行回收这就使得开发人员免去了自己编程控制内存的麻烦和危险随着JVM的不断升级其碎片回收的技术和算法也更加合理JVM 版后产生了一种叫分代收集技术简单来说就是利用对象在程序中生存的时间划分成代以此为标准进行碎片回收

.Java应用程序设计接口

Java Application Programming Interface简称Java API其中文名为Java应用程序设计接口它是一个软件集合其中有许多开发时所需要的控件可以用它来辅助开发

Java API和JVM构成了Java运行的基本环境这两种软件整合在一起处于计算机之上通过这两种软件Java平台把一个Java应用程序从硬件系统分离开从而很好地保证了程序的独立性为了更好地适应开发的需要Java的设计者们提供了种版本的Java平台Java Micro Edition (JME )Java Standard Edition(JSE)和 Java Enterprise Edition (JEE)每一种版本都提供了丰富的开发工具以适应不同的开发需要

上一篇:闭包会简化Java吗

下一篇:现在企业流行的java框架技术