转载自http://www.codeceo.com/article/java-cross-platform.html

以下讨论只针对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. iphone11 android,iPhone11系列发布备受吐槽,对比安卓旗舰后发现,苹果优势不再

    原标题:iPhone11系列发布备受吐槽,对比安卓旗舰后发现,苹果优势不再 每年的9月份在手机圈中都相当"热闹",许多厂商都会在这一期间举办新品发布会,其中最受关注的无疑是前不久举 ...

  2. java跟python优势_当前Java与Python相比还有哪些优势

    首先,Java语言与Python语言都是非常流行的全场景编程语言,在很多开发场景下,既可以使用Java语言,也可以采用Python语言,比如Web开发.大数据开发等等.随着近几年大数据和人工智能领域的 ...

  3. 第 1 章 一 JVM 和 Java 体系架构 (虚拟机介绍、字节码、Java跨平台性)

    第 1 章 JVM 和 Java 体系架构 1.JVM 前言 作为Java工程师, 你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM! 想解决线上JVM GC问题,但却 ...

  4. 为什么Java 8中不再需要StringBuilder拼接字符串

    在Java开发者中,字符串的拼接占用资源高往往是热议的话题. 让我们深入讨论一下为什么会占用高资源. 在Java中,字符串对象是不可变的,意思是它一旦创建,你就无法再改变它.所以在我们拼接字符串的时候 ...

  5. Java跨平台实现原理及JVM垃圾回收、内存管理实战

    对象已死?啊,难受-- 最近深陷排查各种内存溢出.内存泄漏的问题,不得不对垃圾回收器下手了,因为当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些"自动化"的技术实施必要的 ...

  6. java8 stringbuilder_为什么 Java 8 中不再需要 StringBuilder 拼接字符串

    在Java开发者中,字符串的拼接占用资源高往往是热议的话题. 让我们深入讨论一下为什么会占用高资源. 在Java中,字符串对象是不可变的,意思是它一旦创建,你就无法再改变它.所以在我们拼接字符串的时候 ...

  7. Java 跨平台运行机理:Dos 命令在桌面新建文件夹,并在其中编译、运行一段 Java 程序

    文章目录 前言 一.打开 Dos 命令界面 二.Dos 查看桌面文件目录序列 三.Dos 创建文件夹 四.相关 Windows 系统 Shell 命令补充 五.Dos 进入文件夹编写 Java 文件 ...

  8. java 静态区在jvm哪里,JDKJREJVM这三者的联系与区别///java跨平台///堆栈常量区静态区...

    JDKJREJVM这三者的联系与区别///java跨平台///堆栈常量区静态区 JDK,JRE,JVM这三者的联系与区别///java跨平台///堆.栈.常量区.静态区.方法区的区别 ---复习day ...

  9. 常见Dos命令、Java历史、Java跨平台、配置Path环境变量、第一个HelloWorld例子

    文章目录 常见Dos命令.Java历史.Java跨平台 计算机基础 计算机 硬件和软件 硬件 软件 人机交互的方式: 常见的dos命令 Java简介 Java语言重要特性之跨平台 跨平台 Java的跨 ...

  10. 得天独厚的生态优势_加快把生态优势转化为经济优势

    12月23日,县委书记董智武在南雁.怀溪和闹村调研时强调,环境建设是北港山区发展的重要基石,要充分利用得天独厚的生态资源,通过发展生态旅游.民宿等途径,把生态优势转化为经济优势,真正把绿水青山变为&q ...

最新文章

  1. 绝望!导师只给我一周时间.......
  2. Django打造在线教育平台_day_4: 找回密码
  3. 【C++】函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入的参数要求 | 参数作返回值 )
  4. 厉害了,淘宝千万并发,14 次架构演进…
  5. 大数运算(6)——大数阶乘(求位数)
  6. python制作好看的界面_【一点资讯】Python界面如何漂亮的展示树形结构,PyQt5控件之QTreeWidget详解 www.yidianzixun.com...
  7. html格式文档结构保存数据库6,freeCAD文档结构
  8. 《MySQL——group by使用tips》
  9. PHP获取本月起始和终止时间戳
  10. getcwd和pwd为什么不一样_农村医保,为什么每个地区收费不一样?
  11. 上采样和下采样_OpenCV学习笔记(一)之图像金字塔-上采样与降采样与DOG
  12. linux终端python自动提示
  13. iif sql_SQL IIF语句概述
  14. 盘古分词工具学习笔记
  15. myeclipse打开JSP电脑很卡,CPU使用率90%以上
  16. html单元格下拉菜单怎么做,Excel 2013如何制作下拉菜单?(excel下拉菜单怎么做?)...
  17. 看图识物_‎App Store 上的“认识动物-看图识物大全、学英语”
  18. LaTex 在线编辑网站—overleaf简介
  19. 计算机科学也有民科!看知乎计算机民科辩论大战!
  20. python使用selenium模拟浏览器进入好友QQ空间留言

热门文章

  1. AP100N75 MOS 100V75A SGT DFN5×6
  2. 东方树叶、元气森林竞速无糖茶饮
  3. 解决mac系统终端无法使用vpn
  4. Pandas初体验(五)
  5. mysql lsn_MySQL数据库之mysql原理~LSN那点事情
  6. Cherno C++系列笔记12——P40~P41 隐式转换与explicit关键字、运算符及其重载
  7. 渐变炫酷动感css文字特效html页面代码
  8. 爬虫(二)selenium爬二手房
  9. python编写函数main求3!+6!+9!_python基础:9.函数
  10. 【转】作为一名基层管理者如何利用情商管理自己和团队(二)