支持macOS系统 jdk-12.0.2_osx-x64_bin.tar.gz官方免安装版下载
定义:
添加一个名为Shenandoah的新垃圾收集(GC)算法,通过与正在运行的Java线程同时进行疏散工作来减少GC暂停时间。使用Shenandoah的暂停时间与堆大小无关, 这意味着无论堆是200MB还是200GB,您都将具有相同的一致暂停时间。
非目标:
这不是一个统治所有人的GC。还有其他垃圾收集算法可以优先考虑吞吐量或内存占用而不是响应性。Shenandoah是适用于评估响应性和可预测的短暂停顿 的应用程序的算法。目标不是解决所有JVM暂停问题。由于GC之外的其他原因(例如安全时间点(TTSP)发布或监控通胀)而暂停时间超出了此JEP的范围。
定义:
在JDK源代码中添加一套基本的微基准测试,使开发人员可以轻松运行现有的微基准测试并创建新的基准测试。
目标:
1、基于[Java Microbenchmark线束(JMH)] [1] 2、稳定且经过调整的基准测试,针对持续性能测试 2.1、在功能发布的功能完成里程碑之后,以及非功能版本之后的稳定且不移动的套件 2.2、支持与先前JDK版本的适用测试比较 3、简单 3.1 轻松添加新基准 3.2 在API和选项更改,不推荐使用或在开发期间删除时,可以轻松更新测试 3.3 易于构建 3.4 易于查找和运行基准 3.5 支持JMH更新 3.6 在套件中包含大约一百个基准的初始集
许多break使它不必要地冗长,并且这种视觉噪声经常掩盖难以调试的错误,其中缺失break语句意味着发生意外的掉落。
摘要:
引入API来模拟关键类文件和运行时工件的名义描述,特别是可从常量池加载的常量。
动机:
每个Java类文件都有一个常量池,用于存储类中字节码指令的操作数。从广义上讲,常量池中的条目描述了运行时工件(如类和方法)或简单值(如字符串和整数)。 所有这些条目都称为可加载常量,因为它们可以作为ldc指令的操作数(“加载常量”)。它们也可能出现在invokedynamic指令的bootstrap方法的静态参数列表中。 执行一个ldc或invokedynamic指令导致加载常数被解析成一个标准的Java类,如“活”的值Class,String或int。 操作class文件的程序需要对字节码指令进行建模,并依次对可加载的常量进行建模。但是,使用标准Java类型来模拟可加载常量是不合适的。 描述字符串(CONSTANT_String_info条目)的可加载常量可能是可以接受的,因为生成“实时” String对象很简单, 但是对于描述类(CONSTANT_Class_info条目)的可加载常量是有问题的,因为产生“实时”Class object依赖于类加载的正确性和一致性。 不幸的是,类加载有许多环境依赖和失败模式:所需的类不存在或者请求者可能无法访问; 类加载的结果因上下文而异; 装载类有副作用; 有时类加载可能根本不可能(例如当所描述的类尚不存在或者无法加载时,如在编译那些相同类或在jlink转换期间)。 因此,处理可加载常量的程序如果能够以纯粹的名义符号形式操作类和方法,以及不太知名的工件(如方法句柄和动态计算常量),则会更简单: 1、字节码解析和生成库必须以符号形式描述类和方法句柄。如果没有标准机制,它们必须采用ad-hoc机制,无论是ASM的描述符类型Handle,还是字符串元组(方法所有者,方法名称,方法描述符),或者这些机制的特殊(并且容易出错)编码单个字符串。 2、如果它们可以在符号域中工作而不是使用“实时”类和方法句柄,invokedynamic那么通过旋转字节码(例如LambdaMetafactory)来操作的Bootstraps 将更简单。 3、编译器和脱机转换器(例如jlink插件)需要描述无法加载到正在运行的VM的类的类和成员。编译器插件(例如注释处理器)同样需要用符号术语来描述程序元素。
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。