本文概述
- Java 8编程语言增强功能
- Lambda表达式
- 方法参考
- 功能界面
- 可选的
- 每次
- 日期/时间API
- 默认方法
- Rhinoceros JavaScript引擎
- StringJoiner
- 收藏家
- 流API
- 流过滤器
- Java Base64编码和解码
- Java并行数组排序
- Java 8安全性增强
- Java 8工具增强
- Javadoc增强功能
- Pack200增强功能
- Java 8 I / O增强功能
- Java 8联网增强功能
- Java 8并发增强
- XML处理Java API(JAXP)1.6增强功能
- Java虚拟机增强功能
- Java Mission Control 5.3包含在Java 8中
- Java 8国际化增强功能
- Java 8新的日历和语言环境API
- 其他Java 8版本增强功能
- JDK 8u5中的增强功能
- JDK 8u11中的增强功能
- JDK 8u20中的增强功能
- JDK 8u31中的增强功能
- JDK 8u40中的增强功能
Oracle在2014年3月18日发布了Java的新版本Java8。这是Java for Software Development Platform的革命性发行。它包括对Java编程, JVM, 工具和库的各种升级。
Java 8编程语言增强功能
Java 8为Java编程提供以下功能:
- Lambda表达式,
- 方法参考
- 功能接口
- 样式API,
- 默认方法
- Base64编码解码,
- 接口中的静态方法,
- 选修课
- 收藏家课,
- ForEach()方法,
- 并行数组排序
- Rhino JavaScript引擎,
- 并行数组排序
- 类型和重复注释
- IO增强功能
- 并发增强,
- JDBC增强等。
Lambda表达式
Lambda表达式可帮助我们以功能样式编写代码。它提供了一种使用表达式来实现SAM接口(单一抽象方法)的简洁明了的方法。它在集合库中非常有用, 在该库中它有助于迭代, 过滤和提取数据。
有关更多信息和示例:单击此处
方法参考
Java 8 Method Reference用于引用功能接口的方法。它是lambda表达式的紧凑和简单形式。每次使用lambda表达式仅引用方法时, 都可以将lambda表达式替换为方法引用。
有关更多信息和示例:单击此处
功能界面
仅包含一种抽象方法的接口称为功能接口。它可以具有任意数量的默认方法和静态方法。它还可以声明对象类的方法。
功能接口也称为单一抽象方法接口(SAM接口)。
有关更多信息和示例:单击此处
可选的
Java在Java 8中引入了一个新的Optional类。它是一个公共的最终类, 用于处理Java应用程序中的NullPointerException。我们必须导入java.util包才能使用此类。它提供了检查特定变量的值是否存在的方法。
有关更多信息和示例:单击此处
每次
Java提供了一个新的forEach()方法来迭代元素。它在Iterable和Stream接口中定义。
这是Iterable接口中定义的默认方法。扩展Iterable接口的集合类可以使用forEach()方法来迭代元素。
该方法采用单个参数, 该参数是功能接口。因此, 你可以将lambda表达式作为参数传递。
有关更多信息和示例:单击此处
日期/时间API
Java从Java 8开始引入了新的Date and TimeAPI。java.time包包含Java 8 Date和Time类。
有关更多信息和示例:单击此处
默认方法
Java提供了一种在接口内部创建默认方法的功能。在接口内部定义并用default关键字标记的方法称为default方法。这些方法是非抽象方法, 可以具有方法主体。
有关更多信息和示例:单击此处
Rhinoceros JavaScript引擎
Nashorn是JavaScript引擎。它用于在JVM(Java虚拟机)上动态执行JavaScript代码。 Java提供了用于执行JavaScript代码的命令行工具jjs。
你可以通过两种方式执行JavaScript代码:
- 使用jjs命令行工具, 以及
- 通过嵌入到Java源代码中。
有关更多信息和示例:单击此处
StringJoiner
Java在java.util包中添加了一个新的最终类StringJoiner。它用于构造由定界符分隔的字符序列。现在, 你可以通过传递分隔符(例如逗号(, ), 连字符(-)等)来创建字符串。
有关更多信息和示例:单击此处
收藏家
收集器是扩展Object类的最终类。它提供归约操作, 例如将元素累积到集合中, 根据各种标准对元素进行汇总等。
有关更多信息和示例:单击此处
流API
Java 8 java.util.stream包由类, 接口和允许对元素进行功能样式操作的枚举组成。它执行延迟计算。因此, 它仅在需要时执行。
有关更多信息和示例:单击此处
流过滤器
Java流提供了一个方法filter(), 用于根据给定的谓词过滤流元素。假设你只想获取列表中的元素, 则可以借助filter()方法轻松地做到这一点。
此方法以谓词为参数, 并返回结果元素流。
有关更多信息和示例:单击此处
Java Base64编码和解码
Java提供了一个Base64类来处理加密和解密。你需要在源文件中导入java.util.Base64类以使用其方法。
此类提供了三种不同的编码器和解码器, 用于在每个级别上加密信息。
有关更多信息和示例:单击此处
Java并行数组排序
Java在Arrays类中提供了一项新的附加功能, 该功能用于并行排序数组元素。 parallelSort()方法已添加到java.util.Arrays类中, 该类使用JSR 166 Fork / Join并行公共池提供数组排序。这是一种重载方法。
有关更多信息和示例:单击此处
Java 8安全性增强
1)Java安全套接字扩展(JSSE)提供程序默认在客户端启用协议传输层安全性(TLS)1.1和TLS 1.2。
2)添加了改进的方法AccessController.doPrivileged, 该方法使代码可以声明其特权的子集, 而不会阻止整个堆栈的遍历以检查其他权限。
3)已将高级加密标准(AES)和基于密码的加密(PBE)算法(例如PBEWithSHA256AndAES_128和PBEWithSHA512AndAES_256)添加到SunJCE提供程序中。
4)Java安全套接字扩展(SunJSSE)在JDK 7中默认为客户端应用程序启用了服务器名称指示(SNI)扩展, 并且JDK 8支持服务器应用程序的SNI扩展。 SNI扩展是一项功能, 它扩展了SSL / TLS协议, 以指示客户端在握手过程中尝试连接的服务器名称。
5)增强了SunJSSE, 以支持带有关联数据的身份验证加密(AEAD)算法。增强了Java密码术扩展(SunJCE)提供程序, 以支持AES / GCM / NoPadding密码实现以及Galois / Counter Mode(GCM)算法参数。
6)新的命令标志-importpassword被添加到keytool实用程序中。它用于接受密码并将其作为秘密密钥安全地存储。添加了诸如java.security.DomainLoadStoreParameter和java.security.PKCS12Attribute之类的类以支持DKS密钥库类型。
7)在JDK 8中, 使用消息摘要实现SHA-2系列的SHA-224变体增强了加密算法。
8)对NSA Suite B加密的增强支持, 其中包括:
- NSA Suite B加密算法的OID注册
- 支持2048位DSA密钥对生成, 并支持2048位DSA密钥的其他签名算法, 例如SHA224withDSA和SHA256withDSA。
- 对于Diffie-Hellman(DH)算法, 将密钥大小限制从1024提升为2048。
9)SecureRandom类提供了加密强随机数的生成, 该随机数用于私钥或公钥, 密码和签名消息。 JDK 8中引入了getInstanceStrong()方法, 该方法返回最强的SecureRandom的实例。当你需要创建RSA私钥和公钥时, 应使用它。 SecureRandom包括以下其他更改:
- 为UNIX平台引入了两个新的实现, 它们提供了阻塞和非阻塞行为。
10)包括一个新的PKIXRevocationChecker类, 该类使用PKIX算法检查证书的吊销状态。它支持尽力而为检查, 终端实体证书检查以及特定于机制的选项。
11)公钥密码标准11(PKCS)已扩展为包括对Windows的64位支持。
12)Kerberos 5中添加了两种新的rcache类型。none表示完全没有rcache, dfl表示基于DFL样式的基于文件的rcache。此外, 现在支持接受者请求的子项。使用sun.security.krb5.rcache和sun.security.krb5.acceptor.subkey系统属性来配置它们。
13)在JDK 8中, 同一领域内支持Kerberos 5协议转换和约束委派。
14)Java 8默认禁用弱加密。默认情况下不支持与DES相关的Kerberos 5加密类型。可以通过在krb5.conf文件中添加allow_weak_crypto = true来启用这些加密类型。
15)你可以将服务器名称设置为null来表示未绑定的服务器。这意味着客户端可以使用任何服务器名称请求服务。建立上下文后, 服务器可以使用密钥名称SASL.BOUND_SERVER_NAME检索该名称作为协商的属性。
16)Mac OS X现在支持到本机Java通用安全服务(JGSS)的Java本机接口(JNI)桥。你可以将系统属性sun.security.jgss.native设置为true来启用它。
17)定义了一个新的系统属性jdk.tls.ephemeralDHKeySize来定制临时DH密钥大小。除可导出的密码套件或传统模式(jdk.tls.ephemeralDHKeySize = legacy)外, 最小可接受的DH密钥大小为1024位。
18)默认情况下, Java安全套接字扩展(JSSE)提供程序尊重客户端的密码套件首选项。但是, 可以通过在服务器上调用SSLParameters.setUseCipherSuitesOrder(true)来更改行为, 以遵守服务器的密码套件首选项。
Java 8工具增强
1)引入了一个jjs命令, 该命令以交互外壳模式或解释脚本文件的形式调用Nashorn引擎。
2)只要正确包装了JavaFX应用程序, java命令就能启动JavaFX应用程序。
3)Java命令手册页(包括nroff和HTML)已被完全重做。现在, 根据高级选项的影响范围, 将它们分为运行时, 编译器, 垃圾回收和可维护性。现在描述几个以前缺少的选项。还有一个部分介绍自上一发行版以来不推荐使用或删除的选项。
4)新的jdeps命令行工具允许开发人员分析类文件以确定包级别或类级别的依赖关系。
5)你可以远程访问诊断命令, 以前只能通过jcmd工具在本地访问这些命令。使用Java管理扩展(JMX)提供了远程访问, 因此诊断命令将公开给注册到平台MBean服务器的平台MBean。 MBean是com.sun.management.DiagnosticCommandMBean接口。
6)jarsigner工具中包含一个新选项-tsapolicyid, 使你可以从时间戳管理局(Time Stamping Authority)请求签名的时间戳, 并将其附加到签名的JAR文件中。
7)包含一个新方法java.lang.reflect.Executable.getParameters, 它使你可以访问任何方法或构造函数的形式参数的名称。但是, .class文件默认情况下不存储形式参数名称。要将形式参数名称存储在特定的.class文件中, 从而使Reflection API能够检索形式参数名称, 请使用javac编译器的-parameters选项编译源文件。
8)Javac规范现在将正确执行Java语言规范(JLS)15.21节中用于二进制比较的类型规则。
9)在此版本中, 删除了com.sun.mirror软件包中包含的apt工具及其相关API。
Javadoc增强功能
在Java SE 8中, 以下新API已添加到Javadoc工具中。
- 新的DocTree API引入了一个扫描程序, 使你可以遍历由抽象语法树表示的源代码。这扩展了Compiler Tree API, 以提供对javadoc注释内容的结构化访问。
- javax.tools软件包包含一些类和接口, 这些类和接口使你可以直接从Java应用程序调用Javadoc工具, 而无需执行新过程。
- 重组了类或接口的生成文档的“方法摘要”部分。本节中的方法描述按类型分组。默认情况下, 列出所有方法。你可以单击一个选项卡以查看特定类型的方法(静态, 实例, 抽象, 具体或不推荐使用的方法, 如果它们存在于类或接口中)。
- javadoc工具现在支持检查javadoc注释的内容中是否存在由javadoc生成的文件中可能导致各种问题的问题, 例如无效的HTML或可访问性问题。该功能默认情况下处于启用状态, 也可以通过新的-Xdoclint选项进行控制。
Pack200增强功能
由于JSR 292支持Java平台上的动态类型语言, 因此Java类文件格式已更新。
Pack200引擎已更新, 以确保有效压缩Java SE 8类文件。现在, 它可以识别常量池条目和JSR 292引入的新字节码。因此, 使用此版本的pack200工具创建的压缩文件将与较早版本的unpack200工具不兼容。
Java 8 I / O增强功能
在Java 8中, 对java.nio.charset.Charset和扩展的charset实现进行了一些改进。它包括以下内容:
- 一个New SelectorProvider, 可以提高服务器的性能或可伸缩性。 / dev / poll SelectorProvider仍然是默认值。要使用Solaris事件端口机制, 请在系统属性java.nio.channels.spi.Selector设置为值sun.nio.ch.EventPortSelectorProvider的情况下运行。
- <JDK_HOME> /jre/lib/charsets.jar文件的大小减小了。
- java.lang.String(byte [], ∗)构造函数和java.lang.String.getBytes()方法的性能得到了改善。
Java 8联网增强功能
1)添加了新的类java.net.URLPermission。它表示访问由给定URL定义的资源的权限。
2)已添加软件包jdk.net, 其中包含特定于平台的套接字选项以及在所有标准套接字类型上设置这些选项的机制。套接字选项在jdk.net.ExtendedSocketOptions中定义。
3)在HttpURLConnection类中, 如果安装了安全管理器, 并且如果调用了导致尝试打开连接的方法, 则调用方必须拥有对目标URL的主机/端口组合的“ connect” SocketPermission或允许此请求的URLPermission。
如果启用了自动重定向, 并且此请求被重定向到另一个目标, 则调用方还必须具有连接到重定向的主机/ URL的权限。
Java 8并发增强
java.util.concurrent包添加了两个新接口和四个新类。
Java.util.concurrent接口
接口 | 描述 |
---|---|
公共静态接口CompletableFuture.AsynchronousCompletionTask | 它是一个标记接口, 用于标识由异步方法产生的异步任务。它对于监视, 调试和跟踪异步活动可能很有用。 |
公共接口CompletionStage <T> | 它创建一个可能异步计算的阶段, 该阶段在另一个CompletionStage完成时执行一个动作或计算一个值。 |
Java.util.concurrent类
类 | 描述 |
---|---|
公共类CompletableFuture <T>扩展对象实现Future <T>, CompletionStage <T> | 它是一个可以明确完成的未来, 可以用作CompletionStage, 支持在完成时触发的相关功能和操作。 |
公共静态类ConcurrentHashMap.KeySetView <K, V>扩展对象实现Set <K>, 可序列化 | 它是作为一组键的ConcurrentHashMap的视图, 其中可以选择通过映射到公共值来启用添加。 |
公共抽象类CountedCompleter <T>扩展了ForkJoinTask <T> | 一个ForkJoinTask, 在触发时执行完成动作, 并且没有剩余的未决动作。 |
公共类CompletionException扩展了RuntimeException | 在完成结果或任务的过程中遇到错误或其他异常时, 它将引发异常。 |
java.util.concurrent.ConcurrentHashMap类中的新方法
ConcurrentHashMap类在其最新版本中引入了几种新方法。它包括各种forEach方法(forEach, forEachKey, forEachValue和forEachEntry), 搜索方法(search, searchKeys, searchValues和searchEntries)和大量归约方法(reduce, reduceToDouble, reduceToLong等)。还添加了其他方法(mappingCount和newKeySet)。
java.util.concurrent.atomic中的新类
最新版本通过少量新类DoubleAccumulator, DoubleAdder, LongAccumulator和LongAdder引入了可扩展, 可更新的可变支持。它在内部采用竞争减少技术, 与原子变量相比, 可提供巨大的吞吐量提高。
类 | 描述 |
---|---|
公共类DoubleAccumulator扩展Number工具实现Serializable | 它用于一个或多个变量, 这些变量一起维护使用提供的函数更新的运行双精度值。 |
公共类DoubleAdder扩展Number实现Serializable | 它用于一个或多个共同保持初始为零的双和的变量。 |
公共类LongAccumulator扩展Number实现Serializable | 它用于一个或多个变量, 这些变量一起保持使用提供的功能更新的运行时长值。 |
公共类LongAdder扩展Number实现Serializable | 它用于一个或多个共同保持初始为零的长和的变量。 |
java.util.concurrent.ForkJoinPool类中的新方法
此类添加了两个新方法getCommonPoolParallelism()和commonPool(), 它们分别返回公共池或公共池实例的目标并行度。
方法 | 描述 |
---|---|
public static ForkJoinPool commonPool() | 它返回公共池实例。 |
Public static int getCommonPoolParallelism() | 它返回公共池的目标并行度级别。 |
新类java.util.concurrent.locks.StampedLock
添加了新的StampedLock类, 该类用于添加基于能力的锁, 该锁具有三种模式来控制读/写访问(写, 读和开放式读)。此类还支持有条件地在三种模式之间提供转换的方法。
类 | 描述 |
---|---|
公共类StampedLock扩展对象实现Serializable | 此类表示基于能力的锁, 具有用于控制读/写访问的三种模式。 |
XML处理Java API(JAXP)1.6增强功能
在Java 8中, 为XML处理(JAXP)1.6添加了Java API。它需要使用由java.util.ServiceLoader定义的服务提供程序加载程序工具来从服务配置文件加载服务。
这样做的理由是允许将来Java SE平台的模块化, 在该平台上可以通过JAR文件之外的其他方式(可能没有服务配置文件)来部署服务提供者。
Java虚拟机增强功能
加强对invokespecial指令的验证, 以便只能调用当前类或其直接超类中的实例初始化方法。
Java Mission Control 5.3包含在Java 8中
Java Mission Control(JMC)是一组高级工具, 可进行有效且详细的数据分析, 并提供高级的, 不受干扰的Java监视和管理。 JMC提供了有关常见分析领域的部分, 例如代码性能, 内存和延迟。
现在, 默认情况下, JDK 8附带的Java Mission Control中包含日语和简体中文的Babel语言包。
Java 8国际化增强功能
1)Unicode增强
JDK 8包括对Unicode 6.2.0的支持。它包含以下功能。
- 733个新字符, 包括土耳其里拉符号。
7个新脚本:
- 变色象形文字
- Meroitic草书
- 索拉·颂彭
- 查克玛
- 沙拉达
- ri里
- Miao
- 11个新块:包括上面列出的新脚本的7个块和以下现有脚本的4个块:
- 阿拉伯文Extended-A
- dan丹补品
- Meetei Mayek扩展
- 阿拉伯数学字母符号
采用Unicode CLDR数据和java.locale.providers系统属性
Unicode联盟已发布了通用语言环境数据存储库(CLDR)项目, 以“支持世界上的语言, 并提供最大和最广泛的语言环境数据标准存储库。” CLDR成为事实上的区域数据标准。 CLDR基于XML的语言环境数据已合并到JDK 8版本中, 但是默认情况下处于禁用状态。
语言环境数据有四个不同的来源:
- CLDR表示Unicode CLDR项目提供的语言环境数据。
- HOST表示当前用户对基础操作系统设置的自定义。它仅适用于用户的默认语言环境, 并且可自定义的设置可能会因操作系统而异, 但主要支持日期, 时间, 数字和货币格式。
- SPI表示在已安装的SPI提供程序中实现的对语言环境敏感的服务。
- JRE表示与先前的JRE版本兼容的语言环境数据。
要选择所需的语言环境数据源, 请使用java.locale.providers系统属性。以首选顺序列出数据源。例如:java.locale.providers = HOST, SPI, CLDR, JRE默认行为等效于以下设置:java.locale.providers = JRE, SPI
Java 8新的日历和语言环境API
JDK 8包括两个新类, 几个新方法以及一个现有静态方法的新返回值。
用于服务提供者的两个新的抽象类已添加到java.util.spi包中。
类 | 描述 |
---|---|
公共抽象类CalendarDataProvider扩展LocaleServiceProvider | 对于提供语言环境相关的Calendar参数的服务提供商而言, 它是一个抽象类。 |
公共抽象类CalendarNameProvider扩展LocaleServiceProvider | 它是服务提供者的抽象类, 它们提供Calendar字段值的本地化字符串表示形式(显示名称)。 |
现在, 静态方法可以识别编号系统的Locale.UNICODE_LOCALE_EXTENSION。
方法 | 描述 |
---|---|
public static final DecimalFormatSymbols getInstance(Locale locale) | 它用于获取指定语言环境的DecimalFormatSymbols实例。此方法提供对Java运行时本身支持的语言环境以及安装的DecimalFormatSymbolsProvider实现支持的语言环境的DecimalFormatSymbols实例的访问。如果locale为null, 则抛出NullPointerException。 |
在日历API中添加了新方法:
方法 | 描述 |
---|---|
public boolean isSupportedLocale(Locale locale) | 如果该语言环境服务提供者支持给定的语言环境, 则返回true。给定的语言环境可能包含在确定支持时应考虑的扩展名。它在java.util.spi.LocaleServiceProvider类中定义 |
public String getCalendarType() | 它返回此日历的日历类型。日历类型由Unicode区域设置数据标记语言(LDML)规范定义。它在java.util.Calendar类中定义。 |
为Calendar.getDisplayName和Calendar.getDisplayNames方法添加了新的样式说明符, 以确定Calendar名称的格式。
说明符 | 描述 |
---|---|
公共静态最终int SHORT_FORMAT | 它是getDisplayName和getDisplayNames的样式说明符, 指示用于格式的短名称。 |
公共静态最终int LONG_FORMAT | 它是getDisplayName和getDisplayNames的样式说明符, 指示用于格式的长名称。 |
公共静态最终int SHORT_STANDALONE | 它是getDisplayName和getDisplayNames的样式说明符, 用于指示独立使用的短名称, 例如月份缩写作为日历标题。 |
公共静态最终int LONG_STANDALONE | 它是getDisplayName和getDisplayNames的样式说明符, 用于指示独立使用的长名称, 例如月份名称作为日历标题。 |
两种新的用于处理语言环境(可选)扩展的语言环境方法。
方法 | 描述 |
---|---|
public boolean hasExtensions() | 如果此语言环境具有任何扩展名, 则返回true。 |
public Locale stripExtensions() | 它返回此语言环境的副本, 不带扩展名。如果此语言环境没有扩展名, 则此语言环境将自行返回。 |
根据RFC 4647的定义, 两个新的Locale.filter方法返回与指定条件匹配的Locale实例列表:
方法 | 描述 |
---|---|
公共静态List <Locale>过滤器(List <Locale.LanguageRange> priorityList, Collection <Locale>语言环境) | 它使用RFC 4647中定义的过滤机制返回匹配的Locale实例的列表。当mode为Locale.FilteringMode.AUTOSELECT_FILTERING时, 它等效于filter(List, Collection, FilteringMode)。 |
公共静态List <Locale>过滤器(List <Locale.LanguageRange> priorityList, Collection <Locale>语言环境, Locale.FilteringMode模式) | 它使用RFC 4647中定义的过滤机制返回匹配的Locale实例的列表。 |
根据RFC 4647的定义, 两个新的Locale.filterTags方法返回与指定条件匹配的语言标签列表。
方法 | 描述 |
---|---|
公共静态List <String> filterTags(List <Locale.LanguageRange> priorityList, Collection <String>标签) | 它使用RFC 4647中定义的基本过滤机制返回匹配语言标签的列表。当mode为Locale.FilteringMode.AUTOSELECT_FILTERING时, 它等效于filterTags(List, Collection, FilteringMode)。 |
公共静态List <String> filterTags(List <Locale.LanguageRange> priorityList, Collection <String>标签, Locale.FilteringMode模式) | 它使用RFC 4647中定义的基本过滤机制返回匹配语言标签的列表。 |
两种新的查找方法使用RFC 4647中定义的查找机制返回最匹配的语言环境或语言标签。
方法 | 描述 |
---|---|
公共静态语言环境查找(List <Locale.LanguageRange> priorityList, Collection <Locale>语言环境) | 它使用RFC 4647中定义的查找机制为最匹配的语言标签返回Locale实例。 |
公共静态字符串lookupTag(List <Locale.LanguageRange> priorityList, Collection <String>标签) | 它使用RFC 4647中定义的查找机制返回最匹配的语言标签。 |
其他Java 8版本增强功能
JDK 8u5中的增强功能
1)减少了显示应用程序安全提示的频率。
JDK 8u11中的增强功能
1)Java控制面板的“高级”选项卡中提供了一个选项, 用于在安装或更新JRE时禁止赞助者的报价。
2)可以在JAR文件清单中包含Entry-Point属性, 以将一个或多个类标识为RIA(Rich Internet应用程序)的有效入口点。
JDK 8u20中的增强功能
1)javafxpackager工具已重命名为javapackager。此工具已通过自包含应用程序捆绑程序的新参数进行了增强。
以下增强功能与java工具有关:
- 添加了与受限事务内存(RTM)相关的实验性JIT编译器选项。
- 添加了与字符串重复数据删除相关的几个选项。
- 添加了与高级加密标准(AES)内在函数有关的几个选项。
- 不建议使用垃圾回收选项的组合。
2)已将垃圾收集优化指南添加到Java HotSpot虚拟机中。它描述了Java HotSpot VM随附的垃圾收集器, 并帮助你确定哪个垃圾收集器可以最佳地优化应用程序的性能, 尤其是当它处理大量数据(数GB), 具有许多线程并且具有高事务处理率时。
JDK 8u31中的增强功能
1)在此版本中, 从Java控制面板的“高级”选项中删除了SSLv3协议。
JDK 8u40中的增强功能
Java工具
1)已添加-XX:+ CheckEndorsedAndExtDirs, 因为已弃用了认可标准替代机制(JDK-8065675)和扩展机制(JDK-8065702)。该选件有助于识别这些机制的现有用途, 并且在JDK 7u80和JDK 8u40中受支持。
2)Java Flight Recorder(JFR)提供了多种方法来解锁商业功能并在应用程序运行时启用JFR。
它包括Java命令行选项中的Java命令行选项, 例如jcmd诊断命令和图形用户界面(GUI)控件。这种灵活性使你能够在启动时提供适当的选项, 或在以后与JFR交互。
3)选项-XX:StartFlightRecording = parameter = value具有一个新参数dumponexit = {true | false}, 该参数指定当JVM以受控方式终止时是否应生成JFR数据的转储文件。
4)与受限交易内存(RTM)相关的选项不再具有实验性。这些选项包括-XX:RTMAbortRatio = abort_ratio, -XX:RTMRetryCount = number_of_retries, -XX:+ UseRTMDeopt和-XX:+ UseRTMLocking。
5)在Java 8中, 引入了应用程序类数据共享(AppCDS)。 AppCDS扩展了CDS(类数据共享), 以允许将标准扩展目录中的类和应用程序类路径放置在共享档案中。这是一项商业功能, 不再视为实验性功能。
6)添加了新选项-XX:+ ResourceManagement和-XX:ResourceManagementSampleInterval = value。
7)添加了有关大页面的附加信息。大页面(也称为大页面)是显着大于标准内存页面大小的内存页面。大页面优化了处理器平移后备缓冲区。已记录了Linux选项-XX:+ UseHugeTLBFS, -XX:+ UseSHM和-XX:+ UseTransparentHugePages。
8)选项-XX:ObjectAlignmentInBytes = alignment已记录在案。
JJS工具
1)已添加选项–optimistic-types = [true | false]。它通过取消优化重新编译来启用或禁用乐观类型假设。
2)选项–language = [es5]已添加到jjs工具中。它指定ECMAScript语言版本。
Javapackager工具
1)新参数可用于OS X捆绑器。 mac.CFBundleVersion参数标识要使用的内部版本号。
2)mac.dmg.simple参数指示是否跳过了依赖于执行AppleScript代码的DMG自定义步骤。
Jcmd工具
Jcmd工具用于与Java Flight Recorder(JFR)动态交互。你可以使用它来解锁商业功能, 启用/开始/停止飞行记录并从系统获取各种状态消息。
Jstat工具
jstat工具已更新, 其中包含有关压缩类空间的信息, 该信息是元空间的特殊部分。
虚拟机
可扩展本机内存跟踪Hotspot VM功能可帮助诊断VM内存泄漏, 并在VM中没有内存泄漏时澄清用户。 Native Memory Tracker可以在大型系统上运行而无需自动关闭, 也不会造成严重的性能影响, 超出了小型程序可以接受的范围。
评论前必须登录!
注册