JVM实现跨平台
来源:互联网 发布:知乎 留学中介 编辑:程序博客网 时间:2024/06/07 00:28
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。
图1 JVM实现跨平台
关于JVM的执行效率
Java 推出的前几年,人们有不同的看法,解释字节码肯定比全速运行机器码慢很多,牺牲性能换来跨平台的优势是否值得?
然而,JVM 有一个选项,可以将使用最频繁的字节码翻译成机器码并保存,这一过程被称为即时编译。这种方式确实很有效,致使微软的 .NET 平台也使用了虚拟机。
现在的及时编译器已经相当出色,甚至成了传统编译器的竞争对手,某些情况下甚至超过了传统编译器,原因是JVM可以监控运行时信息。例如,即时编译器可以监控使用频率高的代码并进行优化,可以消除函数调用(即“内嵌”)。
但是,Java 毕竟有一些C/C++没有的额外的开销,关键应用程序速度较慢。比如Java采用了与平台无关的绘图方式,GUI程序(客户端程序)执行要慢;虚拟机启动也需要时间。
客户端市场的折戟
Java 的GUI库称不上出色,界面不算友好,大部分用户不太习惯;Java 的客户端资源消耗也比较大,大数据量的应用和功能复杂的应用性能堪忧。
更加不能接受的是,微软因自身利益和SUN分家后,Windows 便不再预装JVM了,用户安装你的程序之前,必须要安装JVM并正确设置,你可以要求普通用户安装你的软件,但是你能期望他了解JVM的有关知识并正确安装设置吗?
虽然你可以将JVM集成在你的程序中,自动安装并设置,不让用户干预,但是你希望附带一个比你的程序还要大好多的JVM吗?一个软件这样做或许可以接受,成千上万个软件都这样做,那用户要安装多少个JVM?磁盘空间要浪费多少?
- JVM实现跨平台
- JVM跨平台理解
- 【深入理解Java虚拟机JVM】java如何实现跨平台
- java 跨平台与JVM
- 【跟着imooc重学java】JVM 实现java的跨平台
- Java虚拟机(JVM)以及跨平台原理
- Java虚拟机(JVM)以及跨平台原理
- Java虚拟机(JVM)以及跨平台原理
- JSchemeMin:又一个JVM平台上的Scheme语言实现
- 《Java平台体系》——第二章 JVM——JVM实现中的多线程
- C++实现跨平台
- java实现跨平台
- 关于JVM和Java的跨平台性
- JavaSE基础之Java语言的跨平台原理(JVM)
- Java入门教程-1.2Java虚拟机(JVM)以及跨平台原理
- Java知多少虚拟机(JVM)以及跨平台原理
- Java语言跨平台和JVM的理解
- Java跨平台的关键——JVM
- 对程序员最有影响力的书籍
- 微信JSSDK开发,调用微信扫一扫jsp前端
- PHP代码实现远程下载文件到本地的函数
- 数据分析的五大思维方式
- HDU 5171 GTY's birthday gift
- JVM实现跨平台
- iOS中选择相册照片添加到应用程序中
- Android资料
- Qt简介
- 服务器查询访问参数
- MySQL 5.7.x 数据库名中文访问出错或表内中文显示?? 解决方法
- ionic 用 cordova插件,ping++方式 实现支付宝,微信支付
- Numpy使用1
- 支付宝即时交易,日期工具类