JAVA的优势并不是一处开发处处运行,这其实是 JAVA的一个劣势
【本文来自《手游都爱用,巨头都在抢:Java为啥这么牛?》评论区,标题为小编添加】
JAVA 的优势并不是一处开发处处运行。
这其实是 JAVA 的一个劣势。
这导致 JAVA 的运行效率一直不怎么样,即便现在各种技术上头,但是代价还是太多了。
其实一开始, JAVA 主要还是“升华”了 C++ ,解决了 C++ 的问题。尤其是对开发人员,C++ 让人头秃的,就是各种功能滥用导致问题不断而被很多人吐槽。其次的 JAVA 的优化更多的是靠编译器和 vm 实现,并不严格依赖应用开发人员的优化功底。
其次的,JAVA 更多的是技术突破,实现了中间型语言的虚拟机运行模式。既可以实现,只要做好 vm 优化,那么在这个 vm 之上就可以保证 JAVA 程序的运行,这个解释语言的优势。又解决了传统解释语言因为没有编译模式,导致明文公布软件而被人获取程序(咱们先不讨论 JAVA 反编译)。这让开发人员并不太需要关注目标硬件但是又可以实现很好的性能,也不用担心自己软件被轻松破解。
而且 JAVA 还一个巨大的优势,就是有大量的功能库可以直接调用。开发人员去开发,甚至并不需要写多少代码,只需要引用几个库,之后把这些库互相之间要处理的数据连起来,程序就搞定了。这让很多应用软件开发商,显著的降低了开发成本,而解决方案提供商,也只需要针对自己的产品写出 JAVA 的模块,就不用考虑用户那边的环境依赖问题。两边开发都省了很多的事情。
当然,JAVA 已经是过去时了。比如现在 google 的 golang ,一个全新的语言必然可以了旧语言的问题。当然除了 golang ,还有其他各种方案出现,比如 graal 这种多语言都揉在一起的东西。还有 llvm 这种后端,可以支持字节码虚拟机,也可以输出为目标架构的二进制。或者重新开始,rustc 也是个好的选择。
JAVA 不是本地直接运行的语言,他需要一个中间层支撑,这个中间层不是程序的范畴。
其次的 JAVA 的很多功能,还需要中间层提供功能支持,一个程序并不是自己运行自己的和支撑环境无关。
还有就是 JAVA 的设计模式,导致很多程序运行时的数据会被丢弃但是并不是马上被回收。而回收策略一直就是 JAVA 核心问题。
软件资源并不真的由硬件资源决定,硬件资源只是一个限制,软件如果要运行,只是被动受限于硬件资源。
如果真的由硬件资源决定,那么我只需要 1G 的内存,就可以畅玩所有 PC 游戏了不是吗?但是实际上呢?现在游戏基本都要 8G 起步了吧?
我不否认不同的计算机语言有自己擅长的领域,但是把语言特点和差异作为理由扯资源占用,这就离谱了。我觉得任何有完整科班教育的从业人员,都明白软件的资源占用是由硬件资源决定的,因为这是常识。
JAVA 不是本地直接运行的语言,他需要一个中间层支撑,这个中间层不是程序的范畴。
其次的 JAVA 的很多功能,还需要中间层提供功能支持,一个程序并不是自己运行自己的和支撑环境无关。
还有就是 JAVA 的设计模式,导致很多程序运行时的数据会被丢弃但是并不是马上被回收。而回收策略一直就是 JAVA 核心问题。
软件资源并不真的由硬件资源决定,硬件资源只是一个限制,软件如果要运行,只是被动受限于硬件资源。
如果真的由硬件资源决定,那么我只需要 1G 的内存,就可以畅玩所有 PC 游戏了不是吗?但是实际上呢?现在游戏基本都要 8G 起步了吧?
JAVA 最开始是给浏览器用的?问题不是啊,这东西其实从一开始设计就是跨设备运行。至于上浏览器只不过是是因为浏览器正好也需要一个跨平台的支持技术。现在不用是因为浏览器有自己的 javascrpit ,以及现在还有 WebAssembly 了。JAVA 的时代已经逐步过去了。但是 JAVA 带来的全新概念和技术,是永远绕不开的。
至于你说内存占用大小这事,真的和语言关系很大。
这牵扯到如何提供程序内存使用的功能,甚至现在内存处理,已经是各种开发语言的一个核心问题了。
而且 JAVA 的内存占用不光是程序运行时使用内存的情况,而且 JAVA 内存占用高,还一个问题就是程序的存储耗费。还有如果语言设计上需要大量使用对象,肯定也比使用变量的设计内存占用高。
我不否认不同的计算机语言有自己擅长的领域,但是把语言特点和差异作为理由扯资源占用,这就离谱了。我觉得任何有完整科班教育的从业人员,都明白软件的资源占用是由硬件资源决定的,因为这是常识。
至于内存占用大小这事,和语言关系不大,应用场景和硬件才是最大的缘由。
JAVA 最开始是给浏览器用的?问题不是啊,这东西其实从一开始设计就是跨设备运行。至于上浏览器只不过是是因为浏览器正好也需要一个跨平台的支持技术。现在不用是因为浏览器有自己的 javascrpit ,以及现在还有 WebAssembly 了。JAVA 的时代已经逐步过去了。但是 JAVA 带来的全新概念和技术,是永远绕不开的。
至于你说内存占用大小这事,真的和语言关系很大。
这牵扯到如何提供程序内存使用的功能,甚至现在内存处理,已经是各种开发语言的一个核心问题了。
而且 JAVA 的内存占用不光是程序运行时使用内存的情况,而且 JAVA 内存占用高,还一个问题就是程序的存储耗费。还有如果语言设计上需要大量使用对象,肯定也比使用变量的设计内存占用高。
现在那个语言能自己提供一套由自己这个语言开发的系统?
这不是说谁最好的环节,而是谁的环境更独立自主的问题。
出来一定时间没人用,并不能代表语言有缺陷或者局限性。
现在语言分类无非就那么几种,没有特殊原因,谁会去换语言重新开发?
而 golang/rust 现在主要的发展方向,是全系统全硬件尽可能多的支持,同时用本语言开发各种库提供直接的调用而脱离原有的系统库。
所以说来,你看的仅仅是开发语言,我看的是整个语言提供独立的整体运行环境。
完全不是一个层次的东西。
换 golang/rust ,目的是直接放弃原来的系统库依赖,用一个语言重建整个系统环境。
尤其是 rust ,已经有用这个语言开发的系统了。
而且 golang/rust 因为是新设计的语言,还解决了传统语言的遗留问题。
内存占用这事,和语言关系很大的。语言设计上直接决定内存的使用模式。
手机游戏都是 java 写的,并不代表他不占内存啊。而且手机 java 本来就是专门单独做的,并不是和计算机是相同的 java 。
内存占用大当然导致不能处处运行,现在遍地 8M 就是超大内存的嵌入式设备,你觉得他们跑 JAVA 如何?
更何况现在都出现了 openj9 这种专门设计降低内存占用的 jvm 了,你觉得 java 的内存问题就那么不是问题?
举出“火箭燃料应该有煤炭”这根本就是没懂我在说什么。
火箭燃料要分很多种,偏二甲肼你看看火箭之外还有谁用了?氢氧反而用的更多,煤油液氧使用的范围更广,甲烷也开始被重视。
所以,偏二甲肼有毒,是谁的问题?用户的问题?和应用场景有关系?
至于内存占用大小这事,和语言关系不大,应用场景和硬件才是最大的缘由。
更何况,我说的是语言的问题吗?
golang/rust 自己的基本库你考虑了吗?不但 golang/rust 大量的系统和指令架构的支持外。完全脱离系统的库依赖,还能封装进 docker 镜像后只依赖内核的 delphi 方案是啥?
更何况,我说的是语言的问题吗?
golang/rust 自己的基本库你考虑了吗?不但 golang/rust 大量的系统和指令架构的支持外。完全脱离系统的库依赖,还能封装进 docker 镜像后只依赖内核的 delphi 方案是啥?
最好笑的就是你最后这句话,合着内存占用大会导致不能处处运行?你这是从哪位“神仙专家”那里听到的?这种话简直就是“火箭燃料应该有煤炭”的翻版啊
内存占用这事,和语言关系很大的。语言设计上直接决定内存的使用模式。
手机游戏都是 java 写的,并不代表他不占内存啊。而且手机 java 本来就是专门单独做的,并不是和计算机是相同的 java 。
内存占用大当然导致不能处处运行,现在遍地 8M 就是超大内存的嵌入式设备,你觉得他们跑 JAVA 如何?
更何况现在都出现了 openj9 这种专门设计降低内存占用的 jvm 了,你觉得 java 的内存问题就那么不是问题?
举出“火箭燃料应该有煤炭”这根本就是没懂我在说什么。
火箭燃料要分很多种,偏二甲肼你看看火箭之外还有谁用了?氢氧反而用的更多,煤油液氧使用的范围更广,甲烷也开始被重视。
所以,偏二甲肼有毒,是谁的问题?用户的问题?和应用场景有关系?
导致其实反而并不能处处运行。
最好笑的就是你最后这句话,合着内存占用大会导致不能处处运行?你这是从哪位“神仙专家”那里听到的?这种话简直就是“火箭燃料应该有煤炭”的翻版啊
最重要的是,JAVA创新性的提出了有jvm这种形式的计算机语言,把跨平台整合、内存管理等功能,放在jvm中,大大提升了开发效率。JAVA语言本身的份额和地位或许会下降,但是jvm则会作为业界的基础和财富。
导致其实反而并不能处处运行。
最重要的是,JAVA创新性的提出了有jvm这种形式的计算机语言,把跨平台整合、内存管理等功能,放在jvm中,大大提升了开发效率。JAVA语言本身的份额和地位或许会下降,但是jvm则会作为业界的基础和财富。
主要就是看如何选择利害关系。
JAVA 一个优势就是各大企业都在投入,所以压榨效率方面确实领先。