Java最大的优势真的在于跨平台吗?
下面讨论仅仅针对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生态系统的完好性主要体如今下面几个方面:
- Java拥有世界上数量最多的程序猿。你说他们是农民也好,但数量放在那里。最明显的效果就是公司招人的时候会比較easy地招到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的最大优势么? 有跨平台需求的仅仅是客户端应用,而不是服 ...
- 中国版dropbox“坚果云”和它背后的团队故事(大的优势就在于他为用户提供了设定多个文件夹的权利)
(速途网专栏 作者:娄昊川)坚果云是一款中文存储服务,前身是“坚果铺子”,提供免费的云空间,与dropbox类似,用户可以直接把档案同步到坚果云,供自己和伙伴用任何设备访问.自上线以来,几乎所有用户都 ...
- 用好Java中的枚举真的没有那么简单
1.概览 在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式. enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承j ...
- 2019年学Java开发有优势吗?
随着信息科技的发展,在我们的日程生活和工作中到处充斥和使用着互联网信息技术.事实说明,互联网已经越来越广泛地深入到人们生活的方方面面,Java技术服务市场需求空缺会越来越大.学会一门IT技术,将拥有更 ...
- Java的图形界面依然是跨平台的
Awt:抽象窗口工具箱,它由三部分组成: ①组件:界面元素: ②容器:装载组件的容器(例如窗体): ③布局管理器:负责决定容器中组件的摆放位置. 图形界面的应用分四步: ① 选择一个容器: ⑴wind ...
- Day002 Java特性和优势
Java特性和优势 简单性(摒弃了c++的指针和内存分配释放) 面向对象(万物皆对象) 可移植性(write once run anywhere) 高性能 分布式 动态性(反射机制) 多线程 安全性 ...
- Java特性和优势
Java特性和优势 简单性 面向对象性 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性
- 第一周-----Java 的核心优势和生态体系——程序员们希望他们编写的程序能够运行在不同的机器,不同的环境中,这需要一种体系中立的语言(即跨平台)。
跨平台是Java 语言的核心优势,赶上最初互联网的发展,并随着互联网的发展而发展,建立了强大的生态体系,目前已覆盖IT各个行业的“第一大语言,称为IT界的英语”
- 《java JDK7学习笔记》之跨平台与路径设置
Platforms表示Solaris.Linux.Windows各种操作系统平台,在这些平台上架构了java Virtaul Machine,简称JVM,Java虚拟机. Java虚拟机可以让java ...
随机推荐
- 二分+并查集【bzoj3007】[SDOI2012]拯救小云公主
Description 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意 ...
- 【UOJ #205】【APIO 2016】Fireworks
http://uoj.ac/problem/205 好神的题啊. dp[i][j]表示以i为根的子树调整成长度j需要的最小代价. 首先要观察到dp值是一个下凸壳. 因为从儿子合并到父亲时要把所有儿子的 ...
- Codeforces 806 D.Prishable Roads
Codeforces 806 D.Prishable Roads 题目大意:给出一张完全图,你需要选取其中的一些有向边,连成一个树形图,树形图中每个点的贡献是其到根节点路径上每一条边的边权最小值,现在 ...
- 背包的第k优解[动态规划]
From easthong ☆背包的第k优解 描述 Description DD 和好朋友们要去爬山啦!他们一共有 K 个人,每个人都会背一个包.这些包的容量是 ...
- C程序运行的背后(2)
话说上回说到,C程序运行之前,必须要加载到其进程地址空间中.今儿咱就扯扯这个加载到底是怎么加载的. 一图胜前言,这个图简单说明了可执行文件加载过程的逻辑流,在此只做粗粒度概要说明.需要准确描述的,请出 ...
- PHP -- 8个必备的PHP功能开发
原文出处:http://www.codeceo.com/8-php-functions.html 做过PHP开发的程序员应该清楚,PHP中有很多内置的功能,掌握了它们,可以帮助你在做PHP开发时更加得 ...
- HDU 4612 Warm up tarjan 树的直径
Warm up 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4612 Description N planets are connected by ...
- extjs form textfield的隐藏方法
只需将textfield的hidden和hideLabel配置为true就可以了.只设置hidden:true时会显示出来一个:的标签. this.formpanel = new Ext.Fo ...
- FreeRTOS Customisation -- FreeRTOSConfig.h
http://www.freertos.org/a00110.html FreeRTOS is customised using a configuration file called FreeRTO ...
- Spring AOP通知实例 – Advice
Spring AOP(面向方面编程)框架,用于在模块化方面的横切关注点.简单得说,它只是一个拦截器拦截一些过程,例如,当一个方法执行,Spring AOP 可以劫持一个执行的方法,在方法执行之前或之后 ...