Java最大的优势真的在于跨平台吗?


以下讨论只针对PC端和移动端。

Java最大的优势真的在于跨平台吗?以前是,但现在已经不是了。

有跨平台需求的仅仅是客户端应用,而不是服务端。例如桌面应用,你的客户可能是Windows用户,也可能是Linux用户,这时候如果不想多投入成本对各个平台进行适配,那么Java所谓的”Write once, run everywhere”就显得异常光彩。然而今天,整个软件世界都在向B/S应用倾倒(嵌入式除外),即使要做客户端跨平台,QT等第三方框架远远比Swing更强大,Java在桌面应用领域基本被淘汰已经是不争的事实了,而当初Java引以为豪的Applet也早已销声匿迹。如果说客户端Java还有一点优秀的话,那只有Android了。Android最初确实靠JVM屏蔽了不同硬件设备之间的区别并取得了巨大的成功,但在今天,Android L中ART模式的出现也即将颠覆这一情况,况且Google还可能会想用自家的Go语言取代Java成为Android平台的第一语言。所以在客户端,Java几乎完败。

服务端应用不需要跨平台。做一个Web服务器,我想没有哪家公司今天用Linux,下个月就换Windows吧?如果仅仅是更换Linux发行版,如从Debian到Fedora,本质上讲其Linux内核是不变的,因此像C++这样纯编译类型的语言已经没什么问题。如果做游戏服务器,我想几乎都会选择Linux而不是Win平台。Java的跨平台优势的实用性其实已经被大大弱化了,可以说在实际应用中并不明显,在一般情况下几乎感知不出Java还能跨平台这个特性。作为三大商用JVM之一的JRockets是只有编译器的JVM,即应用启动时会将字节码全部编译为本地机器码,这其实就很大程度上摒弃了跨平台,而追求性能。

今天,Java最大的优势在于其庞大而完善的生态系统。 一门编程语言是否能流行,主要是由其生态系统决定的。Java生态系统的完善性主要体现在以下几个方面:

Java拥有世界上数量最多的程序员。你说他们是农民也好,但数量放在那里,最明显的效果就是公司招人的时候会比较容易地招到Java程序员。试想如果你想要做一套软件,你有一个很棒的技术方案需要用C++,Scala或Ruby等语言实现,但招不到足够的人手,那么计划多半泡汤。这时候你的应用Java也能做到,并且很轻松就能招到足够的人,那么你选择Java的可能性就要大一些。

Java拥有大量的第三方类库。假如你想解析HTML,用C/C++这类语言恐怕多半只能自己编写解析算法库了,而如果是Java,你可以非常轻松地在Github上找到JSoup,使用Maven导入依赖后分分钟就搞定HTML。为此还有一句讽刺Java的话是:“我们不生产代码,我们只是Github的搬运工。”这句话从字面上看是很有道理的,但却忽略了对软件生产效率的提升所带来的巨大价值。对于软件的开发,公司的唯一成本其实就是“人头费”,每减少一个月开发时间,就能帮助公司节省几十万几千万的研发成本。

Java拥有功能强大的IDE。 Eclipse,通过插件几乎可以满足你开发的任何需求。它虽然有些慢,但你可以通过JVM调优来提高程序的流畅度,千万不要使用默认的JVM参数。不过,IntelliJ Idea已经完全超越Eclipse了,Idea的智能程度几乎可以媲美Win平台下的VS。我是那类离了Vim就活不下去的人,在这两款IDE中都有Vim插件从而让我愉快地存活下去。

Java拥有很多杀手级应用。 不必多说,Spring, Struts, Hibernate, Hadoop, Tomcat, JBoss等等。

Java的语法特性很少。对,这也是一项优点。C++相比C添加了大量特性,学起来费事不说,用起来还会降低代码可读性,其实是费了工夫不讨好。当今世界对编程语言的要求是语法简单,代码可读,对性能已经是退而求其次了,因此才诞生了Python, Ruby这样的编程语言。有很多人批评Java语法写起来很臃肿,我承认这一点,但事实是,编程语言从来都不是因为语法臃肿而被淘汰的,决定其生死的是生态系统。对于批评者,引用知乎的一句话:”动态类型一时爽,代码重构火葬场”

Java的性能已经足够高了。 Sun/Oracle的HotSpot JVM内置的JIT编译器在运行时对字节码已经做出了非常大的优化努力,服务端应用启动后对JVM进行足够的”预热”,并给出合理的启动参数即可。如果不是对性能十分敏感的系统类应用,Java已经足够快了。有一种简单可行的方法可以形象地看出这点,在JVM启动参数中添加+XX:PrintCompilation可以看到JIT编译器的忙碌。当今世界对软件的需求量越来越大,在性能可接受的情况下,开发效率才是第一位的,这也是Python这类动态脚本语言流行的主要原因。

以上仅做客观分析,并不想引起语言战争。毕竟,没有最好的语言,只有最适合某种项目的语言。引用黑格尔的一句话:”存在即合理。”

Java最大的优势真的在于跨平台吗?相关推荐

  1. Java的最大优势还是跨平台么?

    之前码农界有码农说Java的最大优势是跨平台,真的是这样么?其实当时网络没这么火爆的时候,确实是这样的,但现在这已然不是了. 跨平台还是Java的最大优势么? 有跨平台需求的仅仅是客户端应用,而不是服 ...

  2. Java开发网站优势

    之前做asp程序,后来因为公司产品升级转向JAVA.于是开始学习新的语言.也写一下JAVA与ASP对比优势何在: 1.Java的优势在于跨平台的可移植性,可以在windows和linux双平台下稳定运 ...

  3. java培训分享:学习java开发的优势是什么

    想要进入到互联网行业的小伙伴,经常比较纠结学那个学科比较好,目前java.web前端.Python等都是非常热门的行业,前景也是比较好的,选择java学科的人比较多,那么学习java开发的优势是什么呢 ...

  4. [转载] Java内存管理-你真的理解Java中的数据类型吗(十)

    参考链接: Java中的字符串类String 1 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识 ...

  5. Java 中的 String 真的是不可变的吗

    转载自   Java 中的 String 真的是不可变的吗 我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码. public final class Str ...

  6. java 精通_你真的精通Java吗?

    简历和自我介绍上经常能够读到"精通Java"这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点.不能给自己加分了.可是事实真是这样吗? 对于语言的学习,我有一 ...

  7. 精通java益处_你真的精通Java吗?

    简历和自我介绍上经常能够读到"精通Java"这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点.不能给自己加分了.可是事实真是这样吗? 对于语言的学习,我有一 ...

  8. 年年都有人说Java市场饱和,那Java行业到底是不是真的饱和了呢?

    所有人都知道Java程序员薪资高.加薪快.发展好.事实上的确如此. 这也导致了大量外行人涌入IT行业,于是慢慢又有了另一种说法:Java市场已经饱和,大家不要再学Java了,反正学完后找不到工作还得转 ...

  9. 曾经的 Java IDE 王者 Eclipse 真的没落了?21 款插件让它强大起来!

    俗话说,好马配好鞍,才能展现千里马的实力.一名好的开发者,必定要有一套好的开发工具才能打造出最好的产品给用户.要论世界上最好用的 IDE 是哪一种?有人会选择老牌的 Visual Studio 或是 ...

最新文章

  1. 蛋白Ramachandran(拉氏图、拉曼图)的绘制和可视化
  2. 笔记-项目沟通管理-规划沟通管理
  3. android 自定义屏保,android 自定义屏保问题
  4. 全自动洗衣机维修教程
  5. 苦等8个月!华为最令人期待的手机终于要来了:最快月底开卖
  6. Linux内存管理:内存描述之内存区域zone
  7. 2018麦考林杂志计算机科学,最新出炉|2018年麦考林杂志加拿大大学排名!
  8. Java学习6——基本数据类型及其转换
  9. java Http post请求发送json字符串
  10. BZOJ3714: [PA2014]Kuglarz 最小生成树
  11. 更换介质:请把标有 “Debian GNU/Linux 10.2.0 _Buster_ - Official amd64 DVD Binary-1 20191116-09:57” 的盘片插入驱动器“
  12. [wp] HITB CTF 2017 website
  13. 土地购买(USACO 2008 March Gold)
  14. OpenCV_tutorials 04 imgproc module - Affine Transformations
  15. linux ntp时间立即同步命令_linux时间同步,ntpd、ntpdate
  16. subst 不小心创建出来虚拟磁盘 在磁盘管理中删不掉 使用subst命令删除 完美解决
  17. 使用cerebro可视化ElasticSearch集群信息
  18. android 自动打开wifi热点
  19. 从反反鸡汤谈过犹不及
  20. 基于微信小程序的师生答疑交流平台APP

热门文章

  1. python获取当前服务器ip_Python实现获取域名所用服务器的真实IP
  2. opencv 显示图片(直接)
  3. Leetcode 155. 最小栈 (每日一题 20210923)
  4. 在单链表和双链表中删除倒数第K个节点
  5. NTU 课程笔记 :NLP - language model
  6. 文巾解题 184. 部门工资最高的员工
  7. Linux从入门到精通系列之线性表链式存储结构-单链表原理解析
  8. KMeans和KMedoid 的Matlab实现
  9. php 多用户 判断,Laravel jwt 多表(多用户端)验证隔离的实现
  10. 卸载后的mysql和navicat怎么清除干净_小而巧的卸载工具