加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

编程没有银弹 切磋Java8新增特征优弱点

发布时间:2017-06-08 05:43:18 所属栏目:教程 来源:佚名
导读:Java 8或者是 迄今为止最令人等候的Java版本,最初定于本年的9月份宣布,但因为一系列的安详裂痕题目,今朝已推迟到来岁的3月份。

  Java time

  Time在Java里已有很长一段时刻,起首呈现的java.util.Date这个包,其次尚有java.sql.Date、 Calendar。但处理赏罚时刻和日期必要大量的monkey代码,因此,像Joda Time等级三方库因此降生。姗姗来迟,Oracle终于抉择在Java里添加一个 java.time包来整理各类时刻接口。它看起来很切合此刻开拓者的胃口,拥有各类百般的时刻API。

  Java API可以处理赏罚一些时空持续体方面的特征,好比间隔、质量、重量等,这是值得传颂的,但我如故以为 Currency会处理赏罚得更好。我以为Java API必要好好地修剪而不是添加更多的对象,而且起首Java API应该对这些根基元素提供尺度的兼容。

  Nashorn

  Nashorn是Rhino的接替者,该项目标目标是基于Java实现一个轻量级高机能的JavaScript运行情形。

  JDK 7中添加了invokeDynamic,其首要是用来支持非Java说话,尤其是动态说话。而JDK 8中的Nashorn将会给开拓者提供一个越发适用的JavaScript实现。究竟上,Oracle已经有了他本身的Node.js实现,叫做 Node.jar。这好像比在Java里运行JavaScript越发吸引人。

  Accumulators

  自从JDK中集成了 java.util.concurrent以来,该特征并没有遏制成长。相反,JDK 8将构建于JDK 7和fork/join框架之上,并通过加法器(adders)和累加器(Accumulators)获得了进一步的成长。

  起首是同步。可是,假如你行使同步在多线程之间举办增量计数,那么同步有也许难以承担。在Java 6中通过让非竞争锁更便宜(cheap)来使同步不那么难以承担。个中大大都市行使Vector来晋升老应用措施机能,险些每一个单线程都受到了Java Activation Framework的影响。

  Java.util.concurrent包使得线程池和其他相对伟大的多线程布局变得更好,可是,倘若你想要通过跨线程来增进一个变量,那么就 有点大材小用了。对此,我们回收一种比真正的锁更轻更快的原子。在JDK 8中,我们回收Accumulators和adders,这些要比原子轻量多了,对付大大都异构代码来说,这些足以满意它们的需求,假如线程太多,那么可 以增进一个计数器。但想要看到相同map/reduce实现或统计跨线程之间的总和,你如故必要行使原子,由于假如要读取这些跨线程的值,累积的次序是无 法得以担保的。

  HashMap修复

  在Java中行使String.hashCode()实现已是各人熟知的bug。假如在特定的代码中引入HashMap,也许会导致拒绝处事进攻。根基上,假若有足够多的参数hash到沟通值,那么也许会耗损过多的CPU时刻。

  凡是,HashMap bucket回收链表的方法来存储map条目。行使此算法存在大量的斗嘴,而且增进了O(1)到O(N)这种哈希变革的伟大性,为了办理这一题目,通过回收均衡tree算法来低落伟大度。

  TLS SNI

  SNI是 处事器名称标识(Server Name Identification)的缩写,因为大大都民众网站的访客数目不是太多,险些很少能到达数百万用户。许多网站都行使沟通的IP地点和基于名字的假造主机,好比我会见 podcasts.infoworld.com和 [/url][url=http://www.infoworld.com/]www.infoworld.com, 最后的网址是一样的,但会见的主机名是纷歧样的,以是我有也许会会见到差异的Web页面。然而,由于SSL,我也许无法分享IP地点。因为HTTP主机头 是成立在基于定名的假造主机上,而且主机也是依靠SSL来实现加密/解密的,以是,不得不为每个SSL证书申请差异的IP地点。

  在最近几年都是回收SNI来办理这一题目的,Java也不破例。这种方法获得了大大都赏识器的支持,此刻Apache和Java也支持它。这意味着过不了多久,我们就可以看到Apache和基于Java的处事器行使Oracle的SSL实现来支持SNI,称作 JSSE。

  总结

  总之,Java 8包括了一大堆很是适用的特征,这也是很多开拓者想行使最新版本的缘故起因之一。在我看来,Stream是最好的一个特征。进展并行荟萃也可以或许为其历程机能带来一些晋升。而函数式接口也许并不会像预期中的那样好用,万一行使不妥,也许会给开拓者带来许多贫困。

  本文只是总结了部门Java 8新特征,我们信托,在宣布的时辰将会有更多新特征与各人晤面。你可以通过Simon Ritter在JavaOne 2013大会上的演讲PPT来相识今朝已经添加到Java 8中的55个新特征。

  至于该怎样弃取,列位开拓者应该按照本身的现实需求去研究和行使,并不是全部的新特征就是好的,它们也存在优弱点。

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读