下面讨论仅仅针对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. linux——(6)vim与vi

    概念:vi与vim的区别 vi是一款老式的文字处理软件,不过现在依然广泛使用,所有的UnixLike系统都会内置vi文本编辑器. vim可以看出vi的升级版,不过vi更像是一个程序开发工具,功能也比v ...

  2. CentOS下Supervisor的安装与使用入门

    [转载]http://www.51bbo.com/archives/2120 Supervisor是一个进程管理工具,官方的说法 用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原 ...

  3. CF336B[思维题]

    题目链接[http://codeforces.com/problemset/problem/336/B] 题意:画出2*m个圆圈,编号为1-m的圆圈在同一行相邻,编号在m+1-2*m的圆圈在同一行,有 ...

  4. BZOJ4556 HEOI2016 字符串

    后缀数组. 复习了后缀数组后发现这题真的很好写. 我们只需要将c依次向前向后扩展,找落在[a,b]区间内的最大值,遍历过程中不断用height数组更新. 复杂度就是后缀数组,比主席树的快多了. By: ...

  5. --whole-archive和--no-whole-archive

    --whole-archive选项解决的是编译中常遇到的问题.在代码中定义的符号(如函数名)还未使用到之前,链接器并不会把它加入到连接表中. 如下面这个例子: a.cpp: void func(){p ...

  6. C# 时间戳与当前时间互相转换

    时间戳: Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日 ...

  7. 【EGit】The current branch is not configured for pull No value for key branch.master.merge found in config

    1.在当前项目的本地工程目录找到config文件(例如E:\rocket\rocket\.git): 2.修改config文件内容为: [core]    repositoryformatversio ...

  8. MySQL主库切换那些事

    最近连续经历了机架掉电和交换机挂掉,着实切了不少主库,虽然过程心惊胆跳,但是也算是上过战场,经过了实战演习,相信TEAM中的小伙伴们对于切主库已经可以驾轻就熟了. MySQL的主库切换也属于DBA的一 ...

  9. Ext中的get、getDom、getCmp、getBody、getDoc的区别

    Ext中的get.getDom.getCmp.getBody.getDoc的区别Ext中包含了几个以get开头的方法,这些方法可以用来得到文档中DOM.得到当前文档中的组件.得到Ext元素等,在使用中 ...

  10. 【spring cloud】spring cloud 使用feign调用,1.fallback熔断器不起作用,2.启动报错Caused by: java.lang.ClassNotFoundException: com.netflix.hystrix.contrib.javanica.aop.aspectj.Hystri解决

    示例GitHub源码地址:https://github.com/AngelSXD/springcloud 1.首先使用feign调用,需要配置熔断器 2.配置熔断器需要将熔断器注入Bean,熔断器类上 ...