`
茴香豆
  • 浏览: 132790 次
  • 性别: Icon_minigender_2
  • 来自: 桂林
社区版块
存档分类
最新评论

粗识java的工作原理

阅读更多

  java具有跨平台运行的功能,具有很好的可移植性和安全性,是一种安全的面向对象的语言,它的面向对象特性几乎可以与smalltalk相媲美。为了保证这种简单性,Java去掉了C++中许多复杂的、冗余的、有二义性的概念,例如操作符重载、多继承、数据类型自动转换等。为了将程序员从复杂的内存管理的负担中解脱出来,同时也是为了减少错误,Java使用了自动内存垃圾收集机制,程序员只要在需要的时候申请即可,不需要释放,而由Java自己来收集、释放内存中的无用的块。 

1.java代码的执行过程

  Java应用程序的开发周期包括编译、下载 、解释和执行几个部分。

  java编译器把java源代码编译成字节码,既.class文件,源码的变量和方法以及相关的信息保存在这些字节码中。

  字节码由虚拟机JVM解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。

2.java字节码的执行过程

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

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

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

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

这样能确保程序执行的安全性。

 

3.JVM

   JVMJava平台的核心,是抽象的计算机,它具有一个指令集并使用不同的存储区域,它负责执行指令,管理数据、内存和寄存器。为了让编译产生的字节码能更好地解释与执行,把JVM分成了6个部分:JVM解释器、指令系统、寄存器、栈、存储区和碎片回收区。

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

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

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

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

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

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

4.java是一种非常健壮的语言

   (1)可靠性:java没有指针,杜绝内存的非法访问

   (2)自动内存垃圾收集机制。Java自动收集无用的内存单元,进而防止了由于内存泄漏导致的动态内存分配问题。

    (3)Java具有非常好的平台无关性和可移植性。它使用一种与平台无关的代码——字节码,而不是通常的特定机器上的机器码,由平台上的Java虚拟机中的Java解释器解释执行。Java虚拟机是免费的,在许多平台上都有。UNIX、LINUX、Windows和部分操作系统上都可实现java虚拟机。只要能安装java虚拟机,就能执行java代码

   (4)采用基于国际标准的数据类型。Java的原始数据类型在任何机器上都是一样的,例如整型总是32位,长整型总是64位等。

   (5)生成高效的字节码。Java字节码的设计充分考虑了性能的因素,字节码的格式简单,解释器可以生成高效的机器码。 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics