Understanding JVM Internals

 Understanding JVM Internals

        每一个使用Java的开发人员都知道Java字节码运行在JRE(Java Runtime Environment,Java运行时环境)中。JRE中最重要的单元是负责分析和执行Java字节码的Java虚拟机(JVM)。Java开发人员不需要知道JVM是如何工作的。在开发人员没有深入理解JVM的情况下,已经有如此多优秀的应用程序和函数库被开发出来了。然而,如果你理解JVM,你能够更加理解Java,并且使你能够解决一些看似很简单但是不能解决的问题。因此,在这篇文章中,我将解释JVM是如何工作的,JVM的结构,JVM如何执行JAVA字节码,执行的顺序,一些普通错误和它对应的解决方案的例子,以及Java SE 7中的一些新特性。

虚拟机

JRE由JAVA的API和JVM组成。JVM的作用就是通过类加载器(ClassLoader)来读取Java应用程序然后连同JAVA API一道执行Java应用程序。

一个虚拟机(VM)是一个机器的软件实现并像物理机器一样执行程序。起初,Java被设计用于运行在虚拟机上,同物理机器分离开,用于实现WORA(Write Once Run Anywhere,一次编写到处运行),尽管这个目标已经几乎被忘记了。因此,JVM运行在各种硬件上来执行Java字节码,并且不需要修改java执行码。

JVM具有如下特性: 

• 基于栈的虚拟机:最流行的计算机架构比如Intel x86架构和ARM架构都是运行在寄存器之上。然而,JVM是运行在栈上的。 
• 符号引用:除了基本数据类型之外,所有的类型(类和接口)都是通过符号引用来指向的,用来替代通过显式的内存地址的引用。 
• 垃圾回收:一个类实例是通过用户代码显式创建的并通过垃圾回收来自动销毁。 
• 通过清晰的定义基本数据类型来保证平台无关:一个传统的编程语言比如C/C++根据平台不同会有不同的int类型大小。JVM清晰的定义基本数据类型来维持它的兼容性和保证平台无关。 
• 网络字节序:Java类文件使用网络字节序。为了在Intel x86架构使用的的低位优先和RISC系列架构使用的高位优先之间维持平台无关,必须保持一个固定的字节序。因此,JVM使用网络传输使用的网络字节序。网络字节序是高位优先的。 
Sun Microsystems开发了Java。然而,任何供应商都能根据Java虚拟机规范(Java Virtual Machine Specification)开发和提供JVM。由于这个原因,现在有很多种JVM,包括Oracle Hotspot JVM和IBM JVM。Google的安卓操作系统中的Dalvik虚拟机是一种JVM,虽然它并没有遵循Java虚拟机规范。同Java虚拟机不同,Java虚拟机是栈机器,Dalvik虚拟机是基于寄存器的架构。Java字节码也被转变成Dalvik虚拟机使用的基于寄存器的指令集。 

Java字节码 

为了实现WORA,JVM使用Java字节码,一个在Java(用户语言)和机器语言之间的中间语言。Java字节码是部署Java代码的最小单元。 
在解释Java字节码之前,让我们先来看一下它。这个例子是一个发生在实际开发过程中的实际例子的摘要。 

症状(Symptom) 

一个已经成功运行的程序不在运行了。此外,在库函数被更新后它返回了如下错误: 
<span style="background-color: rgb(0, 0, 0);"><span style="color:#ffffff;">Exception in thread "</span><span style="color:#ffff33;">main</span><span style="color:#ffffff;">" java.lang.NoSuchMethodError: com.nhn.user.UserAdmin.addUser(Ljava/lang/String;)V 
     at com.nhn.service.UserService.add(UserService.java:</span><span style="color:#33ff33;">14</span><span style="color:#ffffff;">) 
     at com.nhn.service.UserService.main(UserService.java:</span><span style="color:#66ff99;">19</span><span style="color:#ffffff;">) </span></span>



原文地址:http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals/

http://www.importnew.com/1486.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值