JVM是不是虚拟机的意思?
它与具体的操作系统接口时,必须要调用下一层的命令和参数....
怎么实现的???
它与具体的操作系统接口时,必须要调用下一层的命令和参数....
怎么实现的???
解决方案 »
- 【急】菜鸟请教!如何在java中实现点击按钮弹出一个新的对话框
- 关于用ProcessBuilder类实现与本地软件交互的问题?
- java控制台中能输出彩色文字吗
- java开发C/S桌面应用操作数据库问题
- 100分求高人给我的程序加事件
- URL URLConnection的使用和JVM有关?咋会这样哩!?
- 为啥有错?
- 为何applet在jbuilder7下的appletviewer能看,在网页中却出err
- 用PreparedStatement ps 在数据库中插入记录,但还未提交事务,此时再用Delete语句为什么删除不了用 ps刚才插入的记录,如何可以删除未这
- 初学者问题,请指教
- 简单代码,大家帮忙看一下,我说的对吗??
- 求一正则表达式
楼主【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
没点实际的&……
Java源文件的编译过程
Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码—字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。
Java解释器的执行过程
运行JVM字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由“类装载器”(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其它类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。 随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转换等多种错误。通过校验后,代码便开始执行了。
Java字节码的两种执行方式
1、即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。 2、解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程 序的所有操作。 通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。
JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。
运行java需要支持java的JVM(虚拟机),而编译好的JAVA程序是二进制程序,那么所有的计算机都支持二进制文件的,所以现在只要有JVM来解析这些二进制程序就OK了,所以就可以跨平台了
java是通过jvm 实现跨平台的
而把class文件放到不同的平台下运行的时候,就由针对不同平台的虚拟机翻译成那个平台认识的操作比如,我们的总理去美国访问的时候就带个英文翻译,总理说一段中文,翻译就翻译成英文,老美就知道总理说什么了
然后总理又去德国访问,他就带一个德文翻译,这个时候总理说的同一段中文,翻译把他翻译成了德文
这样,总理不管去哪个国家访问,只要带不同的翻译,他只说中文,不同国家的领导人就知道总理的意思了明白了??
编译之后的class都是一样,但运行在不同操作系统上的jvm的时候,具体的实现就不同了.例如,运行在windows中,最后依赖的就是win32 API.
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中的系统服务调用
Java源文件的编译过程
Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码—字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。
Java解释器的执行过程
运行JVM字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由“类装载器”(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其它类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。 随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转换等多种错误。通过校验后,代码便开始执行了。
Java字节码的两种执行方式
1、即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。 2、解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程 序的所有操作。 通常采用的是第二种方法。由于JVM规格描述具有足够的灵活性,这使得将字节码翻译为机器代码的工作具有较高的效率。对于那些对运行速度要求较高的应用程序,解释器可将Java字节码即时编译为机器码,从而很好地保证了Java代码的可移植性和高性能。
JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。