下面讨论仅仅针对PC端和移动端。

曾经是,但如今已经不是了。

有跨平台需求的仅仅是client应用。而不是服务端。比如桌面应用,你的客户可能是Windows用户。也可能是Linux用户,这时候假设不想多投入成本对各个平台进行适配。那么Java所谓的”Write once, run everywhere”就显得异常光彩。然而今天,整个软件世界都在向B/S应用倾倒(嵌入式除外),即使要做client跨平台,QT等第三方框架远远比Swing更强大,Java在桌面应用领域基本被淘汰已经是不争的事实了,而当初Java引以为豪的Applet也早已销声匿迹。假设说clientJava另一点优秀的话。那仅仅有Android了。

Android最初确实靠JVM屏蔽了不同硬件设备之间的差别并取得了巨大的成功。但在今天。Android L中ART模式的出现也即将颠覆这一情况,况且Google还可能会想用自家的Go语言代替Java成为Android平台的第一语言。所以在client,Java差点儿完败。

服务端应用不须要跨平台。

做一个Webserver,我想没有哪家公司今天用Linux,下个月就换Windows吧?假设仅仅是更换Linux发行版。如从Debian到Fedora,本质上讲其Linux内核是不变的。因此像C++这样纯编译类型的语言已经没什么问题。假设做游戏server,我想差点儿都会选择Linux而不是Win平台。

Java的跨平台优势的有用性事实上已经被大大弱化了,能够说在实际应用中并不明显,在普通情况下差点儿感知不出Java还能跨平台这个特性。作为三大商用JVM之中的一个的JRockets是仅仅有编译器的JVM,即应用启动时会将字节码所有编译为本地机器码,这事实上就非常大程度上摒弃了跨平台,而追求性能。

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

  1. Java拥有世界上数量最多的程序猿。你说他们是农民也好,但数量放在那里。最明显的效果就是公司招人的时候会比較easy地招到Java程序猿。

    试想假设你想要做一套软件,你有一个非常棒的技术方案须要用C++,Scala或Ruby等语言实现,但招不到足够的人手,那么计划多半泡汤。

    这时候你的应用Java也能做到,而且非常轻松就能招到足够的人,那么你选择Java的可能性就要大一些。

  2. Java拥有大量的第三方类库。假如你想解析HTML,用C/C++这类语言恐怕多半仅仅能自己编写解析算法库了,而假设是Java,你能够非常轻松地在Github上找到JSoup,使用Maven导入依赖后分分钟就搞定HTML。为此另一句讽刺Java的话是:“我们不生产代码。我们仅仅是Github的搬运工。

    ”这句话从字面上看是非常有道理的。但却忽略了对软件生产效率的提升所带来的巨大价值。对于软件的开发。公司的唯一成本事实上就是“人头费”,每降低一个月开发时间,就能帮助公司节省几十万几千万的研发成本。

  3. Java拥有功能强大的IDE。 Eclipse,通过插件差点儿能够满足你开发的不论什么需求。

    它尽管有些慢。但你能够通过JVM调优来提高程序的流畅度,千万不要使用默认的JVM參数。只是,IntelliJ Idea已经全然超越Eclipse了,Idea的智能程度差点儿能够媲美Win平台下的VS。我是那类离了Vim就活不下去的人,在这两款IDE中都有Vim插件从而让我愉快地存活下去。

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

    See 我在知乎上的一个回答

  5. 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. 中国版dropbox“坚果云”和它背后的团队故事(大的优势就在于他为用户提供了设定多个文件夹的权利)

    (速途网专栏 作者:娄昊川)坚果云是一款中文存储服务,前身是“坚果铺子”,提供免费的云空间,与dropbox类似,用户可以直接把档案同步到坚果云,供自己和伙伴用任何设备访问.自上线以来,几乎所有用户都 ...

  3. 用好Java中的枚举真的没有那么简单

    1.概览 在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式. enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承j ...

  4. 2019年学Java开发有优势吗?

    随着信息科技的发展,在我们的日程生活和工作中到处充斥和使用着互联网信息技术.事实说明,互联网已经越来越广泛地深入到人们生活的方方面面,Java技术服务市场需求空缺会越来越大.学会一门IT技术,将拥有更 ...

  5. Java的图形界面依然是跨平台的

    Awt:抽象窗口工具箱,它由三部分组成: ①组件:界面元素: ②容器:装载组件的容器(例如窗体): ③布局管理器:负责决定容器中组件的摆放位置. 图形界面的应用分四步: ① 选择一个容器: ⑴wind ...

  6. Day002 Java特性和优势

    Java特性和优势 简单性(摒弃了c++的指针和内存分配释放) 面向对象(万物皆对象) 可移植性(write once run anywhere) 高性能 分布式 动态性(反射机制) 多线程 安全性 ...

  7. Java特性和优势

    Java特性和优势 简单性 面向对象性 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性

  8. 第一周-----Java 的核心优势和生态体系——程序员们希望他们编写的程序能够运行在不同的机器,不同的环境中,这需要一种体系中立的语言(即跨平台)。

    跨平台是Java 语言的核心优势,赶上最初互联网的发展,并随着互联网的发展而发展,建立了强大的生态体系,目前已覆盖IT各个行业的“第一大语言,称为IT界的英语”

  9. 《java JDK7学习笔记》之跨平台与路径设置

    Platforms表示Solaris.Linux.Windows各种操作系统平台,在这些平台上架构了java Virtaul Machine,简称JVM,Java虚拟机. Java虚拟机可以让java ...

随机推荐

  1. Python的环境搭建——万丈高楼平地起

    Python的环境搭建,远程连接,端口映射,虚拟机 写在正文之前 python语言的开发环境还是相对比较简单的,但是也是有很多需要注意的地方,对于初次接触python或者以前很少用到虚拟环境的朋友来说 ...

  2. MYSQL注入天书之开天辟地

    MYSQL注入天书 在线版本:xianzhi.aliyun.com 第一篇地址:https://xianzhi.aliyun.com/forum/read/314.html第二篇地址:https:// ...

  3. springMVC项目,存中文到mysql是乱码(?????)

    问题:jdbc连接mysql数据库,web页面输入的中文,存到数据库却变成"????”: 但是数据库中的中文却能够正常读出并在页面显示 mysql中运行 :SHOW VARIABLES LI ...

  4. Linux上用Docker部署Net Core项目

    前提:本地配置好Docker环境1.构建Net Core镜像 docker pull microsoft/dotnet 2.新建一个DockerFile文件并填充内容 #基于 `microsoft/d ...

  5. dev devfs udev sysfs及关系

        Linux 下对设备的管理方式主要有/dev和sysfs两种,前者是将设备注册为设备节点放入/dev目录下,而后者是在linux2.6内核后引入的新的文件系统. ➤/dev方式 关于/dev的 ...

  6. FastReport.Net使用:[31]使用带参查询及存储

    带参查询 1.在数据列表中创建一个名为姓名的参数. 然后使用一个对话框,将文本框的ReportParameter(报表参数)选为参数中的姓名. 给童鞋们的一个题目:这里可以改为下拉框,学生列表从数据库 ...

  7. [2]树的DFS序

    定义: 树的DFS序就是在对树进行DFS的时候,对树的节点进行重新编号:DFS序有一个很强的性质: 一颗子树的所有节点在DFS序内是连续的一段, 利用这个性质我们可以解决很多问题. 代码: void ...

  8. CUDA学习笔记2:CUDA(英伟达显卡统一计算架构)与已有的VS项目结合

    一.步骤 1.先新建一个简单的控制台应用程序,项目名称为Mytest,如下图所示: 2.在项目中添加一个名为Test.cu文件,如下图所示: 3.在解决方案资源管理器中选择该项目并点击右键,在弹出的菜 ...

  9. 「LOJ6482」LJJ爱数数

    「LOJ6482」LJJ爱数数 解题思路 : 打表发现两个数 \(a, b\) 合法的充要条件是(我不管,我就是打表过的): \[ a + b = \text{gcd}(a, b)^2 \] 设 \( ...

  10. bzoj 1018 线段树维护连通性

    本题将一道LCT的题特殊化(支持加边和删边,询问图的连通性),将图变成了2×m的网格图,然后就神奇地可以用线段树来维护. 对于每个区间[l,r],维护其四个角落之间的连通性(仅仅通过[l,r]这段的边 ...