JVM是不是虚拟机的意思?
它与具体的操作系统接口时,必须要调用下一层的命令和参数....
怎么实现的???

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【Java_gannbare】截止到2008-08-03 06:40:10的历史汇总数据(不包括此帖):
    发帖的总数量:14                       发帖的总分数:360                      每贴平均分数:25                       
    回帖的总数量:17                       得分贴总数量:1                        回帖的得分率:5%                       
    结贴的总数量:12                       结贴的总分数:300                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:2                        未结的总分数:60                       
    结贴的百分比:85.71 %               结分的百分比:83.33 %                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    楼主加油

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=Java_gannbare
      

  2.   

    JVM 用C编写,当然得调用系统级的底层接口和服务了。不过复杂度有JVM完成,我们才不管他在每个平台是如何实现的!
      

  3.   

    全都是 废话一大堆…… 
    没点实际的&……
      

  4.   

    Java Virtual Machine 利用它实现的跨平台  至于具体的  那可能是深层次的东西了 俺不懂了
      

  5.   

    Java作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都能执行这种中间代码。Java源程序被编译成一种与机器无关的字节码格式,在Java虚拟机上运行,与平台无关。
    Java源文件的编译过程
        Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码—字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。
    Java解释器的执行过程
        运行JVM字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由“类装载器”(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其它类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。          随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转换等多种错误。通过校验后,代码便开始执行了。
    Java字节码的两种执行方式
        1、即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。          2、解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程 序的所有操作。    通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。
        JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。
      

  6.   

    该问题很大,简单的说,我自己的理解是这样的:
    运行java需要支持java的JVM(虚拟机),而编译好的JAVA程序是二进制程序,那么所有的计算机都支持二进制文件的,所以现在只要有JVM来解析这些二进制程序就OK了,所以就可以跨平台了
      

  7.   

    所谓的跨平台是以不同版本的jvm实现的。不同平台有不同的jvm,而不同的版本的jvm是根据相对应的硬件以及软件平台设计的。这些不同版本的jvm能识别相同的.class文件。就像java给不同版本的平台请了个翻译一样
      

  8.   

    jvm不跨平台的,不同平台有不同的jvm
    java是通过jvm  实现跨平台的 
      

  9.   

    java虚拟机其实是个翻译器java的class文件里面保存的是java字节码
    而把class文件放到不同的平台下运行的时候,就由针对不同平台的虚拟机翻译成那个平台认识的操作比如,我们的总理去美国访问的时候就带个英文翻译,总理说一段中文,翻译就翻译成英文,老美就知道总理说什么了
    然后总理又去德国访问,他就带一个德文翻译,这个时候总理说的同一段中文,翻译把他翻译成了德文
    这样,总理不管去哪个国家访问,只要带不同的翻译,他只说中文,不同国家的领导人就知道总理的意思了明白了??
      

  10.   

    看看Object这个类就知道了, 有几个Native方法,也就是所有对象的"根"都是要本地化.
    编译之后的class都是一样,但运行在不同操作系统上的jvm的时候,具体的实现就不同了.例如,运行在windows中,最后依赖的就是win32 API.
      

  11.   

    jvm是 C++写的,看起来挺痛苦的.
      

  12.   

    说说我的“猜想”吧
    java语言在设计之初,由于当时的要求是跨平台的,所以借鉴了pascal语言的思想
    让语言运行在一中假象的机器上(就是虚拟机了,逻辑概念上),然后针对不同的平台,具体实现。
    虚拟机有定义良好的指令集,我们的java源文件编译生成的class文件就是这些指令的集合,当然
    包括其他的一些描述信息。以微软的windows平台为例吧,windows下我们写程序所用的API都是在各种DLL(动态链接库)中,
    这些链接库里的API要调用系统服务,都是通过NTDLL.DLL来进行的
    ntdll.dll里包括一些内部支持函数,和内核态的执行体系统服务的分发存根(stub),
    关于ntdll.dll调用系统服务,你可以对照EJB组件的CORBA机制来理解,意思都差不多执行体包含了一系列粒度较小的系统服务,而java虚拟机在运行时,外部表现就是一个动态链接库,
    名字是jvm.dll,所以,基于虚拟机指令集的划分粒度考量,我觉得虚拟机是把指令集转换成对系统服务的
    调用。总结下,就是
    java源码 -》 class文件(虚拟机指令的序列) -》 ntdll.dll中的系统服务调用
      

  13.   

    java作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都能执行这种中间代码。Java源程序被编译成一种与机器无关的字节码格式,在Java虚拟机上运行,与平台无关。 
    Java源文件的编译过程 
        Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码—字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。 
    Java解释器的执行过程 
        运行JVM字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由“类装载器”(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其它类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。         随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转换等多种错误。通过校验后,代码便开始执行了。 
    Java字节码的两种执行方式 
        1、即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。         2、解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程 序的所有操作。   通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。 
        JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。