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 也是个好的选择。

我要评论

请自觉遵守互联网相关的政策法规,共同营造“阳光、理性、平和、友善”的跟评互动环境。

全部评论 18
最热 最早 最新

  • 全部楼层
    jiangtao9999 作者
    当然有关系。
    JAVA 不是本地直接运行的语言,他需要一个中间层支撑,这个中间层不是程序的范畴。
    其次的 JAVA 的很多功能,还需要中间层提供功能支持,一个程序并不是自己运行自己的和支撑环境无关。
    还有就是 JAVA 的设计模式,导致很多程序运行时的数据会被丢弃但是并不是马上被回收。而回收策略一直就是 JAVA 核心问题。
    软件资源并不真的由硬件资源决定,硬件资源只是一个限制,软件如果要运行,只是被动受限于硬件资源。
    如果真的由硬件资源决定,那么我只需要 1G 的内存,就可以畅玩所有 PC 游戏了不是吗?但是实际上呢?现在游戏基本都要 8G 起步了吧?
    谁告诉你这个中间层jvm不属于程序的?你能先把软件和硬件分清楚再说话么?知道什么叫自举吗?还有,现在JAVA的资源回收自己非常迅速了,可以zgc可以确保10ms内完成。最后,你根本就没弄清楚软件和硬件的关系,还在这扯游戏和1g内存呢。是硬件资源发展,让程序可以使用更多的内存,而不是程序必须要用1g内存,懂吗?你该不会以为电脑没有1g内存的时候,就没有游戏了吧。
  • jiangtao9999 观网的黑名单,是保护假信息被戳穿用的 作者
    全部楼层
    Icing9520
    看来你根本就不理解硬件和计算机语言、软件的关系。内存占用这事,和计算机语言根本就没多大关系,最影响程序占用内存大小的是硬件限制。拿语言说事,只能证明自己能力差或者认知水平不够。想要程序性能高,占用硬件资源少,优化程序呗。实在不行自己定制运行环境都行,把用不到的各种语言自带的功能砍掉呗。当然,大部分能力不够的开发人员做不到也想不到,所以只能推到语言身上。
    我不否认不同的计算机语言有自己擅长的领域,但是把语言特点和差异作为理由扯资源占用,这就离谱了。我觉得任何有完整科班教育的从业人员,都明白软件的资源占用是由硬件资源决定的,因为这是常识。
    当然有关系。
    JAVA 不是本地直接运行的语言,他需要一个中间层支撑,这个中间层不是程序的范畴。
    其次的 JAVA 的很多功能,还需要中间层提供功能支持,一个程序并不是自己运行自己的和支撑环境无关。
    还有就是 JAVA 的设计模式,导致很多程序运行时的数据会被丢弃但是并不是马上被回收。而回收策略一直就是 JAVA 核心问题。
    软件资源并不真的由硬件资源决定,硬件资源只是一个限制,软件如果要运行,只是被动受限于硬件资源。
    如果真的由硬件资源决定,那么我只需要 1G 的内存,就可以畅玩所有 PC 游戏了不是吗?但是实际上呢?现在游戏基本都要 8G 起步了吧?
  • 全部楼层
    jiangtao9999 作者
    不矛盾啊。功能机的 JAVA 是特殊版本,所以针对功能机的内存使用有特殊设计,而且即便你说内存,请问在功能机上,内存问题就真的不存在吗?你只不过是说功能机内存小,但是没有说功能机上内存占用对于功能机来说是多是少的问题吧?还是说,你认为在 PC 上, 4G 内存占用 1G 叫多,在功能机上,16M 内存,占用 8M 就不多了?
    JAVA 最开始是给浏览器用的?问题不是啊,这东西其实从一开始设计就是跨设备运行。至于上浏览器只不过是是因为浏览器正好也需要一个跨平台的支持技术。现在不用是因为浏览器有自己的 javascrpit ,以及现在还有 WebAssembly 了。JAVA 的时代已经逐步过去了。但是 JAVA 带来的全新概念和技术,是永远绕不开的。
    至于你说内存占用大小这事,真的和语言关系很大。
    这牵扯到如何提供程序内存使用的功能,甚至现在内存处理,已经是各种开发语言的一个核心问题了。
    而且 JAVA 的内存占用不光是程序运行时使用内存的情况,而且 JAVA 内存占用高,还一个问题就是程序的存储耗费。还有如果语言设计上需要大量使用对象,肯定也比使用变量的设计内存占用高。
    看来你根本就不理解硬件和计算机语言、软件的关系。内存占用这事,和计算机语言根本就没多大关系,最影响程序占用内存大小的是硬件限制。拿语言说事,只能证明自己能力差或者认知水平不够。想要程序性能高,占用硬件资源少,优化程序呗。实在不行自己定制运行环境都行,把用不到的各种语言自带的功能砍掉呗。当然,大部分能力不够的开发人员做不到也想不到,所以只能推到语言身上。
    我不否认不同的计算机语言有自己擅长的领域,但是把语言特点和差异作为理由扯资源占用,这就离谱了。我觉得任何有完整科班教育的从业人员,都明白软件的资源占用是由硬件资源决定的,因为这是常识。
  • jiangtao9999 观网的黑名单,是保护假信息被戳穿用的 作者
    全部楼层
    Icing9520
    你捋一下自己说的内容,不觉得矛盾吗?一边说JAVA占用内存多,一边说功能机的JAVA是特殊版本,所以才内存小。拜托,计算机语言本身就是会随着应用范围发展的。JAVA最开始是给浏览器使用的语言,而现在,大多数浏览器都不支持JAVA了。JAVA曾经有过面向功能机等小型设备的版本,现在也没有了。
    至于内存占用大小这事,和语言关系不大,应用场景和硬件才是最大的缘由。
    不矛盾啊。功能机的 JAVA 是特殊版本,所以针对功能机的内存使用有特殊设计,而且即便你说内存,请问在功能机上,内存问题就真的不存在吗?你只不过是说功能机内存小,但是没有说功能机上内存占用对于功能机来说是多是少的问题吧?还是说,你认为在 PC 上, 4G 内存占用 1G 叫多,在功能机上,16M 内存,占用 8M 就不多了?
    JAVA 最开始是给浏览器用的?问题不是啊,这东西其实从一开始设计就是跨设备运行。至于上浏览器只不过是是因为浏览器正好也需要一个跨平台的支持技术。现在不用是因为浏览器有自己的 javascrpit ,以及现在还有 WebAssembly 了。JAVA 的时代已经逐步过去了。但是 JAVA 带来的全新概念和技术,是永远绕不开的。
    至于你说内存占用大小这事,真的和语言关系很大。
    这牵扯到如何提供程序内存使用的功能,甚至现在内存处理,已经是各种开发语言的一个核心问题了。
    而且 JAVA 的内存占用不光是程序运行时使用内存的情况,而且 JAVA 内存占用高,还一个问题就是程序的存储耗费。还有如果语言设计上需要大量使用对象,肯定也比使用变量的设计内存占用高。
  • jiangtao9999 观网的黑名单,是保护假信息被戳穿用的 作者
    归途人生
    又到了谁才是世界上最好的语言环节
    又一个看错了观点的人。
    现在那个语言能自己提供一套由自己这个语言开发的系统?
    这不是说谁最好的环节,而是谁的环境更独立自主的问题。
  • jiangtao9999 观网的黑名单,是保护假信息被戳穿用的 作者
    全部楼层
    嘦憇靤
    出来已经有一定时间,却根本没几个人用的编程语言,必然有很大的缺陷或者局限性,不管它看起来有多么好。
    说的就好像 C++ 没有缺陷一样,现在 C++ 已经是成很多开发者的累赘了。
    出来一定时间没人用,并不能代表语言有缺陷或者局限性。
    现在语言分类无非就那么几种,没有特殊原因,谁会去换语言重新开发?

    而 golang/rust 现在主要的发展方向,是全系统全硬件尽可能多的支持,同时用本语言开发各种库提供直接的调用而脱离原有的系统库。
    所以说来,你看的仅仅是开发语言,我看的是整个语言提供独立的整体运行环境。

    完全不是一个层次的东西。
    换 golang/rust ,目的是直接放弃原来的系统库依赖,用一个语言重建整个系统环境。
    尤其是 rust ,已经有用这个语言开发的系统了。
    而且 golang/rust 因为是新设计的语言,还解决了传统语言的遗留问题。
  • 全部楼层
    jiangtao9999 作者
    现在说的就是 java 的事情,你为什么不允许说 java 的劣势?
    内存占用这事,和语言关系很大的。语言设计上直接决定内存的使用模式。
    手机游戏都是 java 写的,并不代表他不占内存啊。而且手机 java 本来就是专门单独做的,并不是和计算机是相同的 java 。
    内存占用大当然导致不能处处运行,现在遍地 8M 就是超大内存的嵌入式设备,你觉得他们跑 JAVA 如何?
    更何况现在都出现了 openj9 这种专门设计降低内存占用的 jvm 了,你觉得 java 的内存问题就那么不是问题?
    举出“火箭燃料应该有煤炭”这根本就是没懂我在说什么。
    火箭燃料要分很多种,偏二甲肼你看看火箭之外还有谁用了?氢氧反而用的更多,煤油液氧使用的范围更广,甲烷也开始被重视。
    所以,偏二甲肼有毒,是谁的问题?用户的问题?和应用场景有关系?
    你捋一下自己说的内容,不觉得矛盾吗?一边说JAVA占用内存多,一边说功能机的JAVA是特殊版本,所以才内存小。拜托,计算机语言本身就是会随着应用范围发展的。JAVA最开始是给浏览器使用的语言,而现在,大多数浏览器都不支持JAVA了。JAVA曾经有过面向功能机等小型设备的版本,现在也没有了。
    至于内存占用大小这事,和语言关系不大,应用场景和硬件才是最大的缘由。
  • 全部楼层
    jiangtao9999 作者
    所以,你认为跟在别人后面,别人用什么就用什么,别人开发什么,就在后面 1:1 复制才是正途?
    更何况,我说的是语言的问题吗?
    golang/rust 自己的基本库你考虑了吗?不但 golang/rust 大量的系统和指令架构的支持外。完全脱离系统的库依赖,还能封装进 docker 镜像后只依赖内核的 delphi 方案是啥?
    出来已经有一定时间,却根本没几个人用的编程语言,必然有很大的缺陷或者局限性,不管它看起来有多么好。
  • 又到了谁才是世界上最好的语言环节
  • jiangtao9999 观网的黑名单,是保护假信息被戳穿用的 作者
    嘦憇靤
    这位作者吹捧的golang和rust在最新的tiobe排行榜里面一个排14,一个排29。而现在已经没几个人用的Delphi是排12。
    所以,你认为跟在别人后面,别人用什么就用什么,别人开发什么,就在后面 1:1 复制才是正途?
    更何况,我说的是语言的问题吗?
    golang/rust 自己的基本库你考虑了吗?不但 golang/rust 大量的系统和指令架构的支持外。完全脱离系统的库依赖,还能封装进 docker 镜像后只依赖内核的 delphi 方案是啥?
  • jiangtao9999 观网的黑名单,是保护假信息被戳穿用的 作者
    全部楼层
    Icing9520
    每种语言都有擅长的领域和应用范围,为什么非要拿java的劣势领域来说事呢?更何况,内存占用这事,跟语言关系很大么?明显是和开发人员的技术水平和应用场景有关系啊。十几二十年前的功能机上,众多的手机游戏都是java写的,你觉得能占用多大的内存?
    最好笑的就是你最后这句话,合着内存占用大会导致不能处处运行?你这是从哪位“神仙专家”那里听到的?这种话简直就是“火箭燃料应该有煤炭”的翻版啊
    现在说的就是 java 的事情,你为什么不允许说 java 的劣势?
    内存占用这事,和语言关系很大的。语言设计上直接决定内存的使用模式。
    手机游戏都是 java 写的,并不代表他不占内存啊。而且手机 java 本来就是专门单独做的,并不是和计算机是相同的 java 。
    内存占用大当然导致不能处处运行,现在遍地 8M 就是超大内存的嵌入式设备,你觉得他们跑 JAVA 如何?
    更何况现在都出现了 openj9 这种专门设计降低内存占用的 jvm 了,你觉得 java 的内存问题就那么不是问题?
    举出“火箭燃料应该有煤炭”这根本就是没懂我在说什么。
    火箭燃料要分很多种,偏二甲肼你看看火箭之外还有谁用了?氢氧反而用的更多,煤油液氧使用的范围更广,甲烷也开始被重视。
    所以,偏二甲肼有毒,是谁的问题?用户的问题?和应用场景有关系?
  • 全部楼层
    jiangtao9999 作者
    处处运行代价就是对硬件要求高,尤其是内存需求大。
    导致其实反而并不能处处运行。
    每种语言都有擅长的领域和应用范围,为什么非要拿java的劣势领域来说事呢?更何况,内存占用这事,跟语言关系很大么?明显是和开发人员的技术水平和应用场景有关系啊。十几二十年前的功能机上,众多的手机游戏都是java写的,你觉得能占用多大的内存?
    最好笑的就是你最后这句话,合着内存占用大会导致不能处处运行?你这是从哪位“神仙专家”那里听到的?这种话简直就是“火箭燃料应该有煤炭”的翻版啊
  • 这位作者吹捧的golang和rust在最新的tiobe排行榜里面一个排14,一个排29。而现在已经没几个人用的Delphi是排12。
  • jiangtao9999 观网的黑名单,是保护假信息被戳穿用的 作者
    Icing9520
    JAVA的优势当然是有一次开发处处运行的跨平台能力啊。当然,这个特点在现在的蓬勃发展的各种编程语言之中,算不上是什么特色优势了,但是JAVA可是25年前发明的计算机语言,在当时乃至本世纪初的十多年时间里,有跨平台能力的计算机语言并不多,所以JAVA的跨平台优势在当时还是很明显的。
    最重要的是,JAVA创新性的提出了有jvm这种形式的计算机语言,把跨平台整合、内存管理等功能,放在jvm中,大大提升了开发效率。JAVA语言本身的份额和地位或许会下降,但是jvm则会作为业界的基础和财富。
    处处运行代价就是对硬件要求高,尤其是内存需求大。
    导致其实反而并不能处处运行。
  • JAVA的优势当然是有一次开发处处运行的跨平台能力啊。当然,这个特点在现在的蓬勃发展的各种编程语言之中,算不上是什么特色优势了,但是JAVA可是25年前发明的计算机语言,在当时乃至本世纪初的十多年时间里,有跨平台能力的计算机语言并不多,所以JAVA的跨平台优势在当时还是很明显的。
    最重要的是,JAVA创新性的提出了有jvm这种形式的计算机语言,把跨平台整合、内存管理等功能,放在jvm中,大大提升了开发效率。JAVA语言本身的份额和地位或许会下降,但是jvm则会作为业界的基础和财富。
  • 中国人的上帝就是自己 数据显示:我是天才的可能性是99.74%
    JAVA的优势是免费的同时,还可以解决问题,并且,开发人员也比较多,这是中国互联网企业最看重的。
  • jiangtao9999 观网的黑名单,是保护假信息被戳穿用的 作者
    老潘潘潘潘
    运行效率是跟c++这样的或更新的某些语言比吧?比相当多语言还是要强的。
    其实现在大家殊途同归了。
    主要就是看如何选择利害关系。
    JAVA 一个优势就是各大企业都在投入,所以压榨效率方面确实领先。
  • 老潘潘潘潘 我这喜欢出来随便发言的毛病要改…
    运行效率是跟c++这样的或更新的某些语言比吧?比相当多语言还是要强的。

站务

全部专栏