睡觉时:新增的Java 8新增功能

Java8生日 自Java 8推出以来,最有趣的功能是什么?

Java 8最近庆祝了它的第一个生日,而主要版本刚刚一年多前发布。 这当然值得庆祝。

自从最初的Java 8版本问世以来,已经发布了六个更新。 这些更新中的一些元素是次要的,但是如果您不注意的话,您可能会漏掉一些有趣的附加内容。 这里有五个您应该检查的:

1. Nashorn性能增强

Java 8带来的附加功能之一是Nashorn。 如果您不熟悉,“ Nashorn的目标是通过Java与本地JVM一起实现轻量级高性能JavaScript运行时。” 在8u40版本中,Oracle发布了Nashorn脚本引擎的增强功能,以改善Java和JavaScript之间的工作关系。 尽管是完全不同的语言,但根据他们的名字,让他们两个都能很好地工作会带来一种满足感。 就像双体船上的猫一样。

双体船

通过此更新,Nashorn已被改写为一种乐观类型系统,以更好地应对在Java环境中实现JavaScript的一些挑战(即围绕将动态语言(如JavaScript)输出为Java字节码)。 通过乐观类型,Nashorn对不能静态推断的局部变量和表达式类型做出乐观假设。 它假定任何类型都是int,并在运行时发现错误的情况下即时调整这些假设。

这项增强功能可以使执行代码更加快捷,尽管由于调整而导致的预热时间略有降低。 正如Nashorn团队所报告的那样 ,预热时间问题是Java 9的重点之一,因此,如果这对您来说是一个大问题,那么好消息可能即将到来。 显然,您必须在这里决定是否值得为您准备好预热成本,但是Oracle为这些Nashorn增强功能运行的基准测试非常令人鼓舞。 与V8相比,在某些情况下,他们报告了数量级的改进和接近本机的性能。

这些增强功能的另一个潜在的令人敬畏的好处是,Nashorn可以扩展到JavaScript以外的其他动态语言。 在这方面仍然需要做一些工作,但是现在有了乐观打字系统的基础。

Oracle目前还没有将这些增强功能设置为Nashorn的默认功能,因此,如果要以这种方式运行Nashorn,请使用参数–optimistic-types = true。 如果您想了解更多有关此增强功能的详细信息,请在此处查看Oracle博客。

  • 从以下版本开始可用: Java 8 Update 40

2.合作记忆管理(商业功能)

Oracle对Java 8的另一项补充是协作内存管理。 此功能引入了“内存压力”的概念,并且全部用于解决内存使用量接近最大水平的情况。 内存压力是系统可用总内存的代表。 内存压力测量值越高,系统越接近内存不足。

当系统快要用完内存时,JDK将跟踪总内存使用量并采取措施减少总内存使用量。 通常,这些步骤将包括减少Java堆大小,这可能会对性能产生一些影响。 在这种情况下,有意进行性能折衷是值得的。

//边响警报

要注意的重要一点是,这是一项商业功能。 如果您是HotSpot或OpenJDK开发人员,则将无法使用该功能。 您无疑知道Oracle和Java在商业和开源方面之间的某些紧张关系,这是另一个例子。 协作内存管理本身可能是一项商业功能,但它会驱动和/或影响属于开源阵营的其他增强功能(例如,我正在谈论的列表中的下一个功能)。 无论您是将这些其他更改视为对商业工作的主要有益结果,还是作为试图将开源用户吸引到商业方面的钩子,都不可避免地涉及一些不透明性问题。

Oracle(可以理解)没有共享其商业功能的内部测试和基准。 但是,当这些功能扩展到开源方面进行的更改时,“为什么要进行这些更改”的答案实质上是“因为我们告诉您更好,即使我们不会告诉您如何做”,您可以看到为什么有些人会不高兴。 并不是说甲骨文在弯腰曲折,或者某种程度上,这仅仅是因为缺乏透明度并不能与开源世界息息相关,并阻碍了开发人员真正做出明智决定的能力。 无论如何,足够了。

//侧边结束。

  • 从以下版本开始可用: Java 8 Update 40

3.使MinHeapFreeRatio和MaxHeapFreeRatio标志易于管理

合作记忆管理的增加也是其他变化的催化剂。 其中之一是通过能够在运行时调整其值,使MaxHeapFreeRatio和MinHeapFreeRatio标志可管理。 通过此更新,您可以控制这些标志的值,这些标志的默认值分别从70/40更改为100/0,以使JVM更好地增长和收缩Java堆。 与协作内存管理不同,管理这些标志不是商业性的,可以单独使用。 商业的合作内存管理功能确实使跨多个JVM实例的管理变得更加容易,但这不是必需的。 无论如何,对这些标志的更改应该改善在需要动态堆或更改堆的情况下管理Java堆大小的经验。

现在,与所有可管理的事物一样,存在严格管理默认设置会导致管理不善的风险,导致性能不佳。 获得更多控制权并不是一件好事。 这里要权衡的是,能够管理这些标志可以帮助您在减少使用次数时减少内存占用,或在增加使用次数时更轻松地扩展内存。 即使您是一个倾向于质疑这种由商业驱动的变革所带来的广泛好处的人,它本身也确实提供了实实在在的好处(如果您属于这个阵营,我当然不会为此怪罪您)。 而且,如果这些标志的某些问题导致代码中出现错误或异常, Takipi会在这里为您找到它们!

  • 从以下版本开始可用: Java 8 Update 20

4.新的JAXP处理限制属性– maxElementDepth

maxElementDepth属性已添加到JAXP(用于XML处理的Java API)中,以解决资源使用问题。 它使应用程序能够限制其解析的xml文件的最大元素深度。 设置限制时,所有JDK和JRE调用都会遵守该限制。

如果您偶尔处理巨大的xml文件,并且不想花费大量资源来解析周围的特大文件,则此属性会派上用场。 它也可以用作安全性或性能检查,以防止您的应用程序被怪物文件占用。

  • 从以下版本开始可用: Java 8 Update 11

5. Java依赖性分析工具(jdeps)

Java依赖性分析工具(jdeps)是一个新的命令行工具,开发人员可以使用它来显示其应用程序和Java库的静态依赖性。 它提供了一定程度的自定义,因此您可以从中获得相当广泛的信息。 在默认情况下运行它时,它将在软件包级别向您显示应用程序的静态依赖关系。

jdeps来自joda-time

jdeps来自joda-time

您也可以在更细粒度或更详细的级别上运行jdeps。 例如,您可以使用指定的特定类运行它,以便查看该类的所有静态依赖关系。 或者,如果您感到烦躁,可以使用-v或-verbose选项来打印所有类级别的依赖项。 这自然会导致大量文本,因此jdeps还提供了-dotoutput选项,可将所有内容写入文件。

还需要注意的是-jdkinternals选项,该选项向您显示JDK内部API中的所有类级别的依赖关系。

有关更多信息,请参见jdeps页面。

  • 从以下版本开始可用: Java 8 Update 11

结论

现在,Oracle当然已经发布了六个更新,其中不仅仅包含这五个附加内容,而且根据您所使用的Java的不同,我可能还没有为您提供一些重要的功能(例如JavaFX的性能增强),但是这些是五个非常值得关注的很棒的东西。 我不能说将来的发行版中会有什么,但是这里是希望有更多有趣的东西。 如果我错过了您发现超级有用的任何补充,请告诉我。

翻译自: https://www.javacodegeeks.com/2015/03/while-you-were-sleeping-the-top-new-java-8-additions.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派安装win10arm linux,在树莓派3B 上安装 Windows 10 ARM 版的方法

早先关注我们的朋友可能对《国外开发者尝试在树莓派3上运行Windows 10桌面版》有印象。本文转自 amatfan.com,文末视频来自 daveb778(感谢柠栀和刺分享),给出了如何在树莓派3B上安装Windows10 ARM版,是的,这次并非IoT版&#xff0…

各种触摸手势

轻按(UITapGestureRecognizer) -- 用一个或多个手指在屏幕上轻按。 按住(UILongPressGestureRecognizer) -- 用一个或多个手指在屏幕上按住。 轻扫(UISwipeGestureRecognizer) -- 用一个或多个手指沿特定方向轻扫。 张合(UIPinchGestureRecognizer) -- 张合手指以缩放对象。 旋…

宝塔linux取消登录,宝塔面板如何关闭安全入口

通过 SSH 终端关闭安全入口通过 SSH 终端连接rm -f /www/server/panel/data/admin_path.pl即可关闭宝塔 Linux 面板的安全入口,关闭之后的面板登录地址就是:http://服务器 IP:8888。不过关闭这个安全入口之后很难恢复,所以不建议关闭宝塔面板…

[ofbiz]设置任务计划(job),提示service_item已经传递

问题描述:设置任务计划(job),提示service_item已经传递 解决办法: 红色框内不要填写,就可以了。"已经传递"是翻译的不准确,应该是"已过时",所以不设置开始时间,或者开始时间…

c支限界算法语言n皇后问题分,n皇后问题(分析)

这道题需要用到回溯算法,现在在这里先简单的介绍一下这个算法:回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路…

android系统相机自动录像,android 调用系统相机录像并保存

1、在AndroidManifest.xml中添加如下代码tools:ignore"ProtectedPermissions" />android:authorities"${applicationId}.provider"android:name"android.support.v4.content.FileProvider"android:exported"false"android:grantUri…

【原创】jpgraph中文乱码问题的解决

php jpgraph库非常强大,可以在后台生成图片 后台生成在需要导出图表型报告的时候非常有用,当然,前端的可视化还是要用highcharts/echarts/anycharts等类库 比较麻烦的是中文乱码问题,有3个地方乱码: legendsetStickLab…

getstring方法android,JSON中optString和getString方法的区别

JSON中optString和getString方法的区别更新时间:2017年07月07日 15:18:24 投稿:mrroptString方法会在对应的key中的值不存在的时候返回一个空字符串,但是getString会抛一个JSONException 。下面通过一段代码给大家介绍JSON中optString和get…

jpanel把原本内容覆盖掉_A5:APP关键词覆盖你该了解哪些

A5:APP关键词覆盖你该了解哪些点击上方蓝字关注我们苹果ios/安卓-各大应用商店ASO优化大全IOS关键词覆盖1、苹果AppStore关键词搜索的权重排序为app标题、副标题>app关键词>app描述>宣传文本及评论(App关键词100字符)。2、如何优化100字符关键词①、根据产品用户画像分…

android音乐播放器音乐加载,Android开源音乐播放器之在线音乐列表自动加载更多...

系列文章前言当咱们的ListView数据比较多时,咱们通常都会选择分页显示,而分页显示就须要一个动做触发加载更多操做,一般咱们会使用上拉加载更多,但我以为不够人性化,由于用户须要手动上拉,因此更加人性化的…

最短路径--Floyd算法

Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3)…

vue 打开一个iframe_Vue 之五 —— 单元测试

单元测试(unit testing):是指对软件中的最小可测试单元进行检查和验证。代码的终极目标有两个,第一个是实现需求,第二个是提高代码质量和可维护性。单元测试是为了提高代码质量和可维护性,是实现代码的第二…

Hibernate如何存储二级缓存条目

介绍 使用数据库访问抽象层的好处是可以透明地实现缓存,而不会泄漏到业务逻辑代码中 。 Hibernate Persistence Context充当事务后写式高速缓存 ,将实体状态转换转换为DML语句。 持久性上下文充当逻辑事务存储,并且每个Entity实例最多可以具…

file协议访问linux,Mozilla Firefox for Android 'file'协议未授权访问漏洞(CVE-2014-1501)

发布日期&#xff1a;2014-03-18更新日期&#xff1a;2014-04-02受影响系统&#xff1a;Mozilla Firefox < 28.0描述&#xff1a;--------------------------------------------------------------------------------BUGTRAQ ID: 66424CVE(CAN) ID: CVE-2014-1501Firefox是…

dcdc芯片效率不高的原因_半导体厂商如何做芯片的出厂测试?

本文来源于知乎&#xff0c;已获作者授权&#xff0c;谢谢。作者&#xff1a;温戈链接&#xff1a;https://www.zhihu.com/question/20584576/answer/1538640891知乎网友提问&#xff1a;半导体厂商如何做芯片的出厂测试&#xff1f;例如 Intel 的 CPU、手机处理器&#xff0c;…

魅族android n内测报名,不再万年Android 5.0! Flyme安卓N内测招募开启

科客点评&#xff1a;恰逢Flyme五周年庆&#xff0c;这算的是给煤油们最大的礼物。近日&#xff0c;魅族Flyme系统非常活跃&#xff0c;为国内友商操碎了心&#xff0c;为此适配了一众友商热门机型&#xff0c;刷了不少存在感&#xff0c;但这显然不是魅族要搞的“大事情”。6月…

db2数据库连接数 linux_介绍一款数据库管理工具DBeaver

之前连接MySQL一直使用的是navicate&#xff0c;挺好用的&#xff0c;不过是个付费软件&#xff0c;一直想找一款免费开源的软件来替代。今天偶然间发现DBeaver&#xff0c;这是一款基于java开发的数据库工具&#xff0c;而且可以支持Windows、Linux、MacOS多个平台&#xff0c…

jqgrid mvc_jqGrid,REST,AJAX和Spring MVC集成

jqgrid mvc两年多以前&#xff0c;我写了一篇关于如何在Struts2中实现优雅的CRUD的文章。 实际上&#xff0c;我必须就该主题写两篇文章&#xff0c;因为该主题如此广泛。 今天&#xff0c;我采用了一套更为流行的&#xff0c;完善的框架和库&#xff0c;采用了更为轻量级的现代…

ChronicleMap –具有堆外内存的Java体系结构

我的上一篇文章是在几周前写的&#xff0c;在收到一些有效的反馈后&#xff0c;我想澄清几点&#xff0c;作为本文的序言。 “ 使用零垃圾创建数百万个对象 ”的主要收获应该是&#xff0c;使用Chronicle&#xff0c;在编写Java程序时&#xff0c;您不会“局限于”使用jvm分配…

下列不属于html5语义元素,HTML5 新的语义元素

HTML5 提供了新的语义元素来明确一个Web页面的不同部分:HTML5中新的语义元素HTML5 元素标签定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分。根据W3C HTML5文档: section 包含了一组内容及其标题。WWFThe World Wide Fund for Nature (WWF) is....HTM…