网站建设钱,wordpress代码按钮,找人做淘宝网站需要多少钱,湖州建设局网站 项目验收流程作家艾萨克阿西莫夫#xff08;Isaac Asimov#xff09;曾经说过“唯一不变的就是变化”。 这不仅仅是软件行业中的一个短语#xff0c;这是绝对的事实。 曾经有一天#xff0c;Corba为王#xff0c;但Web Services篡夺了它。 即使在Web服务领域#xff0c;过去也全都是关… 作家艾萨克·阿西莫夫Isaac Asimov曾经说过“唯一不变的就是变化”。 这不仅仅是软件行业中的一个短语这是绝对的事实。 曾经有一天Corba为王但Web Services篡夺了它。 即使在Web服务领域过去也全都是关于SOAP的但是现在它是REST风格的服务 如今已经越来越流行。 现在某些事物显然比其他事物徘徊的时间更长。 关系数据库已经存在了40年并且还不会被NoSql淘汰。 自1999年以来 HTTP协议的版本为1.1 它帮助我们使用了称为Internet的事物。 至于Java在过去的15年中它一直是一种非常流行的计算机编程语言。 根据荷兰研究公司Tiobe的总体流行程度Java在1997年排名第5在2007年排名第1在2012年9月排名第2。在撰写本文时 Amazon上有超过2,000种以英语编写的Java编程书籍并且有近300,000个线程与Java相关的Stackoverflow 。 但是正如乔治·奥威尔George Orwell曾经说过的那样“眼下谁赢了总是无敌的”。 但是Java是否立于不败之地或开始消亡 这就是现在越来越多的问题。 以我的拙见对Java的挑战可以分为三类 替代语言的兴起 可扩展性/多核处理器 胖客户的回报。 让我们详细说明一下... 替代语言的兴起 替代语言可以分为两类在JVM上运行的语言ScalaGroovy等和不在JVM上的语言PythonRuby。 一件有趣的事是第一批人很大 。 在JVM上运行的语言并不是Java专有的并且在某种程度上增强了Java的功能这提醒了我们JVM是软件工程的一个杰出之处。 开发团队可以使用诸如Groovy之类的利基语言获得更多的表达能力但是当他们需要一些很酷的Java库或只需要额外的性能时仍然可以使用Java。 请记住Groovy 2.0的优点可以加快它的运行速度但是它仍然不如Java快 。 至于其中某些语言所提供的功能这些功能不是Java所能做到的虽然确实如此但并非总是如此。 看一下Java 8的路线图及其将包含的功能。 就像Java EE 5和6从Spring / Seam汲取灵感一样Java第八版主要发行版也将从其他语言汲取灵感。 例如Lambdas将促进文字函数。 Java 8 Lamdas将支持类型推断由于它们只是文字因此有可能像String文字或任何匿名Object一样传递并返回它们。 这意味着不必编写Comparator的实现以传递给Collections sort实用程序以对字符串列表进行排序而在Java 8中我们将要做 Collections.sort(list, (s1, s2) - s1.length() - s2.length()); 因此替代的JVM语言不会完全将Java淘汰。 它仍然存在但是在聚会上演奏的音乐有更好的选择在聚会上客人鼓励主人做更好的主人。 在多核平台上扩展 至于多核和JVM我们都知道在单核上运行JVM可以在Java的第一个发行版中产生线程。 但是这些线程不是并行执行的CPU很快在它们之间切换给人以并行运行的印象。 JStack可能会告诉您单核计算机上有50个线程的状态为“可运行”但这仅表示它们正在运行或有资格运行。 使用多核CPU可以获得真正的并行性。 JVM决定何时并行执行线程。 那么这是怎么回事 首先即使并发和线程从一开始就是Java的功能语言支持仍然很有限这意味着开发团队正在编写许多自己的线程管理代码-很快就会变得难看。 在JDK 1.5中随着java.util.concurrent包中一系列线程管理功能的出现这大大缓解了。 其次为了获得更好的并行性还需要其他一些东西。 Java 7中带有Doug Lea的Fork / Join框架 该框架使用巧妙的技术例如窃取工作和双面队列来提高并行度。 但是即使使用此框架分解和重新排列数据仍然是程序员需要完成的任务。 函数编程为我们提供了另一个选择可以对数据集进行并行计算。 例如在Scala中您只需传递希望对数据进行操作的函数并告诉scala您希望计算并行化。 outputAnswer((1 to 5).par.foreach(i longComputation)) 你猜怎么着 Java 8中将提供相同的功能。 Array.asList(1,2,3,4,5).parallel().foreach(int i -heavyComputation()) 由于可伸缩性和性能是体系结构的表亲值得指出的是在许多实验中Java仍然比其他语言表现更好。 出色的计算机语言基准测试游戏显示Java胜过许多语言。 它在许多测试中击败了PerlPHPPython3Erlang之类的东西在几乎所有测试中击败了ClojureC并且在性能结果方面仅落后于C 。 现在性能测试无法涵盖所有内容并且上下文始终会有一些偏向这会偏向于一种语言而不是另一种语言但是通过这些测试就好像Java并不是一个缓慢的教练。 胖客户的回报 自AJAX问世以来 道格·克罗克福德 Doug Crockford告诉人们如何使用JavaScript以及大量优秀的JavaScript库的兴起使胖客户端真正回来了。 闭上你的眼睛想象一下像gmail这样的酷炫单页Web应用程序的外观和感觉如果它只是基于Spring MVCJSF或Struts的瘦客户机Web框架–您将无法击败设计良好的胖客户机的性能。 可以节省的一个好处是JavaScript难以实现远比某些人认为的要好。 真正了解Closure模块和各种JavaScript最佳实践需要花费大量的思考而不是像在Spring MVC和Struts这样的Web框架中了解自己的方式。 此外构建单个页面的Web应用程序同样是gmail不仅需要出色JavaScript理解还需要了解Web的工作方式。 例如浏览器不会在浏览器历史记录中放入Ajax请求。 因此如果您希望后退和前进按钮对用户有用且有意义则您必须对片段标识符进行一些巧妙的处理。 这里可能存在一些使用Web框架和JavaScript的混合方法当然还有一些JavaScript库的空间。 这为开发人员提供了构建应用程序的结构然后使您有机会使用JavaScriptJQuery或任何很棒的库使该应用程序的重要部分变得花哨。 在真正的胖Web客户端方法中不应从服务器提供HTML即没有JSP唯一从服务器返回的就是数据以JSON的形式。 但是使用混合方法可以使从瘦到胖的过渡更加容易并且仍可以将JavaScript库放在CDN上您将无法获得完全胖Web客户端方法的所有优点。 摘要 总之Java经历了一些糟糕的时刻。 与Struts和Spring MVC之类的其他框架相比AWT是一项紧急工作Swing存在性能问题EJB的早期迭代很麻烦并且JSF还是有问题的。 但是即使到了今天 Hadoop等极富创新性的项目还是使用Java构建的。 它仍然得到开源社区的大力支持。 这种支持不仅对Java有所帮助而且还向Java展示了它的一些问题以及需要改进的地方。 Java证明了它具有进一步发展的能力而其他语言则挑战了它我认为游戏还没有结束。 不用说Java的未来很大一部分将取决于Oracle但让我们希望无论发生什么情况赢家都是技术。 相关链接 Yammer及其向scala的迁移 詹姆斯·高斯林James Gosling在Google技术讲座上探讨Java的现状和未来 Oracle上的文章描述了Java 7中的Fork和Join Eric Bruno 构建Java多核应用程序 Edgardo Hernandez Java中的并行处理 IEEE 十大编程语言 JDK 8下载 关于Fork Join的Java Code Geeks文章 爱德华·哈宁的《好叉》加入文章 叉子/ Doug Lea的纸张 Fork / Join Java从Doug Lea更新信息 Scala Java神话 – Urs Peter和Sander van der Berg的精彩文章 参考 Java已死还是不可战胜 从我们的JCG合作伙伴 Alex Staveley在都柏林的技术博客博客中获得。 翻译自: https://www.javacodegeeks.com/2012/09/is-java-dead-or-invincible.html