java语言跨平台的根本原因是java虚拟机的跨平台,java的运行必须的依靠JVM的支撑,如果java虚拟机都没有了,那么java源代码和编译后的class字节码文件就是不能识别运行的。java之所以能够一次编译,跨平台运行就是jvm的跨平台在起作用。至于你说的直接运行,你可以把它打包成exe程序不就ok了吗?
有什么问题你都可以追问我,没问题,望采纳,谢谢!
诚心试答,不喜勿喷
首先第一个问题,我们要追究下java这个语言了,说很多java的历史是没有意义的,但是从道理上来说,最早java是为了解决跨平台问题出现的,这一点我相信楼主也会承认,那么如何实现跨平台呢?我认为有一个例子不太恰当,但是很形象,在一个斜坡上建造一个平地,怎么办呢?就是低处就填上多水泥,高处就少填些,然后这些填充的水泥我理解就是jvm,它负责把不同高度的平台整合的平整一点,这就是基础。
然后我还想提起一个东西,编译器,编译器有自己的规则,会把java代码编译成一个扩展名为class的文件,这个文件可以被jvm识别,然后jvm再去做底层的东西。
然后到这里我有个想法,如果楼主非要用java编写不借助虚拟机程序,那么按照原理上来说就一定要生成出二进制代码,也就是机器码,那么能够实现这种设想的关键环节就是编译器,所以意味着楼主需要重新写一个自己的编译器,将java代码的逻辑含义直接转换为机器码,那么java也就实现了你说的那种不借助虚拟机,但是这就又出现一个问题,这样的java跟c有什么区别呢?他对比于c或者c++优势又在哪里呢?是不是就没有存在的必要了呢?
最后就是unix还快。。。那么我认为在极致的情况下就是自己定制针对业务的系统,甚至直接定制硬件,用单片机,针对性的解决问题,那么这就是专用计算机了,操作系统这种东西还是属于通用计算机的范畴吧。
交流第一~~~·
哦对了,再补充两点,看到楼主说跨平台能否兼得,我觉得这个是最难的一点,也是为什么到现在都没有一种抛开虚拟机类似机制实现跨平台的语言的原因,那就是不同平台犹豫架构不同,有很多区别,都不好解决,这个就是关键问题了,像整数数据类型这种还好说,我们可以采用截断的方式统一,但是像是浮点这种就不好办了吧,你说是吧
软件(程序)《====》硬件资源
软件运行要消耗硬件资源。不同的硬件遵守了不同规范,就需要有加入一层来屏蔽硬件规范差异。操作系统就此诞生了。虽然这样已经可以开发软件了,但是不同操作系统又有较大差异,所以JVM这样的虚拟机技术又诞生了。这样多出来一层有好有坏。
你说的“快”,不要单单去认为运行快。还要考虑开发成本、代码质量等综合因素。unix再快,也快不过机器码编程直接与硬件交互。但是,你会写机器码吗?就算你会写机器码,你敢保证你的机器码代码质量会运行很快吗?换个机器,你的机器码还能运行吗?移植性不能保障,应用领域就很狭小了。
这个时代不再是个人英雄的时代,是平台、规范、合作的时代。所以,当有人说我们国家要做操作系统,还要2年就赶超windows、安卓的时候,我笑了。
java虚拟机是java的核心所在,如果没有虚拟机它就是java,解决方法就是用java虚拟机开发一款操作系统或者jdk能根住不同的操作系统编译成不同的机器代码,我觉得可以用后者来解决跨平台语音性能问题,我一直觉得java虚拟机很多余,直接从编译上解决跨平台更能实现程序安装量问题,用户不需要再考虑安装语音运行环境,其实Android就是前者的一半解决方案吧
Java程序,如果离开了JVM那是基本不能实现运行的。
除非,你用Java搭建自己的系统。也就是说,让你自己的系统识别Java的字节码文件。这样,你的系统就能够对编译好的class文件进行解释,从而实现运行。