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 ...
随机推荐
- Python并发编程-进程池的返回值
同步或异步获取返回值 #p = Pool() #p.map(funcname,iterable) 默认异步的执行任务,且自带close,join功能 #p.apply(), 同步调用进程池的方法 #p ...
- Python类总结-析构函数和__call__方法
class Foo: def __init__(self): pass #析构函数 def __del__(self): print('解释器要销毁我了,我要做最后一次呐喊') def __call_ ...
- C51中的xdata
今天在写公司芯片对应的.H文件时,在定义寄存器的时候出现一个问题. 我们芯片的寄存器地址是定义在片外RAM区的,不能使用sfr这样的关键字来进行定义. 后来查阅了对应的资料才发现定义寄存器有很多种方法 ...
- C#多线程编程实战(一):线程基础
1.1 简介 为了防止一个应用程序控制CPU而导致其他应用程序和操作系统本身永远被挂起这一可能情况,操作系统不得不使用某种方式将物理计算分割为一些虚拟的进程,并给予每个执行程序一定量的计算能力.此外操 ...
- [BZOJ5306][HAOI2018]染色
bzoj luogu Description 给一个长度为\(n\)的序列染色,每个位置上可以染\(m\)种颜色.如果染色后出现了\(S\)次的颜色有\(k\)种,那么这次染色就可以获得\(w_k\) ...
- hdu 4802 GPA 水题
GPA Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4802 Des ...
- Swift 自定义打印方法
Swift 自定义打印方法 代码如下 // MARK:- 自定义打印方法 func MLLog<T>(_ message : T, file : String = #file, funcN ...
- Linux下Shell命令的输出信息同时显示在屏幕和保存到日志文件中
#直接覆盖日志文件 ls -l | tee ./t.log #将输出内容附加到日志文件 ls -l | tee -a ./t.log 使用的是tee命令
- Spartan-6 FPGA Configuration
These configuration pins serve as the interface for a number of different configuration modes: • JTA ...
- Assignment (HDU 2853 最大权匹配KM)
Assignment Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...