Java最大的优势真的在于跨平台吗?
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最大的优势真的在于跨平台吗?相关推荐
- Java的最大优势还是跨平台么?
之前码农界有码农说Java的最大优势是跨平台,真的是这样么?其实当时网络没这么火爆的时候,确实是这样的,但现在这已然不是了. 跨平台还是Java的最大优势么? 有跨平台需求的仅仅是客户端应用,而不是服 ...
- Java开发网站优势
之前做asp程序,后来因为公司产品升级转向JAVA.于是开始学习新的语言.也写一下JAVA与ASP对比优势何在: 1.Java的优势在于跨平台的可移植性,可以在windows和linux双平台下稳定运 ...
- java培训分享:学习java开发的优势是什么
想要进入到互联网行业的小伙伴,经常比较纠结学那个学科比较好,目前java.web前端.Python等都是非常热门的行业,前景也是比较好的,选择java学科的人比较多,那么学习java开发的优势是什么呢 ...
- [转载] Java内存管理-你真的理解Java中的数据类型吗(十)
参考链接: Java中的字符串类String 1 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识 ...
- Java 中的 String 真的是不可变的吗
转载自 Java 中的 String 真的是不可变的吗 我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码. public final class Str ...
- java 精通_你真的精通Java吗?
简历和自我介绍上经常能够读到"精通Java"这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点.不能给自己加分了.可是事实真是这样吗? 对于语言的学习,我有一 ...
- 精通java益处_你真的精通Java吗?
简历和自我介绍上经常能够读到"精通Java"这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点.不能给自己加分了.可是事实真是这样吗? 对于语言的学习,我有一 ...
- 年年都有人说Java市场饱和,那Java行业到底是不是真的饱和了呢?
所有人都知道Java程序员薪资高.加薪快.发展好.事实上的确如此. 这也导致了大量外行人涌入IT行业,于是慢慢又有了另一种说法:Java市场已经饱和,大家不要再学Java了,反正学完后找不到工作还得转 ...
- 曾经的 Java IDE 王者 Eclipse 真的没落了?21 款插件让它强大起来!
俗话说,好马配好鞍,才能展现千里马的实力.一名好的开发者,必定要有一套好的开发工具才能打造出最好的产品给用户.要论世界上最好用的 IDE 是哪一种?有人会选择老牌的 Visual Studio 或是 ...
最新文章
- 蛋白Ramachandran(拉氏图、拉曼图)的绘制和可视化
- 笔记-项目沟通管理-规划沟通管理
- android 自定义屏保,android 自定义屏保问题
- 全自动洗衣机维修教程
- 苦等8个月!华为最令人期待的手机终于要来了:最快月底开卖
- Linux内存管理:内存描述之内存区域zone
- 2018麦考林杂志计算机科学,最新出炉|2018年麦考林杂志加拿大大学排名!
- Java学习6——基本数据类型及其转换
- java Http post请求发送json字符串
- BZOJ3714: [PA2014]Kuglarz 最小生成树
- 更换介质:请把标有 “Debian GNU/Linux 10.2.0 _Buster_ - Official amd64 DVD Binary-1 20191116-09:57” 的盘片插入驱动器“
- [wp] HITB CTF 2017 website
- 土地购买(USACO 2008 March Gold)
- OpenCV_tutorials 04 imgproc module - Affine Transformations
- linux ntp时间立即同步命令_linux时间同步,ntpd、ntpdate
- subst 不小心创建出来虚拟磁盘 在磁盘管理中删不掉 使用subst命令删除 完美解决
- 使用cerebro可视化ElasticSearch集群信息
- android 自动打开wifi热点
- 从反反鸡汤谈过犹不及
- 基于微信小程序的师生答疑交流平台APP
热门文章
- python获取当前服务器ip_Python实现获取域名所用服务器的真实IP
- opencv 显示图片(直接)
- Leetcode 155. 最小栈 (每日一题 20210923)
- 在单链表和双链表中删除倒数第K个节点
- NTU 课程笔记 :NLP - language model
- 文巾解题 184. 部门工资最高的员工
- Linux从入门到精通系列之线性表链式存储结构-单链表原理解析
- KMeans和KMedoid 的Matlab实现
- php 多用户 判断,Laravel jwt 多表(多用户端)验证隔离的实现
- 卸载后的mysql和navicat怎么清除干净_小而巧的卸载工具