最新java虚拟机是实现跨平台的基础通用
在日常的学习、工作、生活中,肯定对各类范文都很熟悉吧。范文书写有哪些要求呢?我们怎样才能写好一篇范文呢?这里我整理了一些优秀的范文,希望对大家有所帮助,下面我们就来了解一下吧。
java虚拟机是实现跨平台的基础篇一
相信大家已经了解到java具有跨平台的特性,可以“一次编译,到处运行”,在windows下编写的程序,无需任何修改就可以在linux下运行,这是c和c++很难做到的。那么,跨平台是怎样实现的呢?欢迎大家阅读!更多相关信息请关注相关栏目!
jvm也是一个软件,不同的平台有不同的版本。我们编写的java源码,编译后会生成一种 .class 文件,称为字节码文件。java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的jvm,就可以运行字节码文件,运行我们编写的java程序。
而这个过程中,我们编写的java程序没有做任何改变,仅仅是通过jvm这一”中间层“,就能在不同平台上运行,真正实现了”一次编译,到处运行“的目的。
jvm是一个”桥梁“,是一个”中间件“,是实现跨平台的关键,java代码首先被编译成字节码文件,再由jvm将字节码文件翻译成机器语言,从而达到运行java程序的目的。
注意:编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过jvm翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由jvm翻译成的机器码却不一样。
所以,运行java程序必须有jvm的支持,因为编译的结果不是机器码,必须要经过jvm的再次翻译才能执行。即使你将java程序打包成可执行文件(例如 .exe),仍然需要jvm的支持。
注意:跨平台的是java程序,不是jvm。jvm是用c/c++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的jvm。
java 推出的前几年,人们有不同的看法,解释字节码肯定比全速运行机器码慢很多,牺牲性能换来跨平台的优势是否值得?
然而,jvm 有一个选项,可以将使用最频繁的字节码翻译成机器码并保存,这一过程被称为即时编译。这种方式确实很有效,致使微软的 .net 平台也使用了虚拟机。
现在的及时编译器已经相当出色,甚至成了传统编译器的竞争对手,某些情况下甚至超过了传统编译器,原因是jvm可以监控运行时信息。例如,即时编译器可以监控使用频率高的代码并进行优化,可以消除函数调用(即“内嵌”)。
但是,java 毕竟有一些c/c++没有的额外的开销,关键应用程序速度较慢。比如java采用了与平台无关的绘图方式,gui程序(客户端程序)执行要慢;虚拟机启动也需要时间。
java 的gui库称不上出色,界面不算友好,大部分用户不太习惯;java 的.客户端资源消耗也比较大,大数据量的应用和功能复杂的应用性能堪忧。
更加不能接受的是,微软因自身利益和sun分家后,windows 便不再预装jvm了,用户安装你的程序之前,必须要安装jvm并正确设置,你可以要求普通用户安装你的软件,但是你能期望他了解jvm的有关知识并正确安装设置吗?
虽然你可以将jvm集成在你的程序中,自动安装并设置,不让用户干预,但是你希望附带一个比你的程序还要大好多的jvm吗?一个软件这样做或许可以接受,成千上万个软件都这样做,那用户要安装多少个jvm?磁盘空间要浪费多少?
所以,直接投放市场的面向普通用户的客户端程序,用java开发的很少,大部分java开发的客户端是给企业内部员工使用,员工领到电脑时,技术部已经给配置好了。如果你希望从事客户端开发,建议学习 c/c++ 和 .net,它们在window客户端开发方面有较大的优势。
种种原因,注定了java客户端不利于推向市场,让普通用户接受。不过话又说回来,客户端开发也不是java的初衷,java最初是面向嵌入式的,却随着互联网的兴起而快速成长,在web开发上大显身手。
s("content_relate");