-
标记整理算法
查看全部 -
跟踪收集算法
查看全部 -
垃圾回收值引用计数算法
查看全部 -
jdk11单文件源文件运行只需要java helloworld.java,不再需要javac编译
查看全部 -
jdk10允许使用var关键字来定义变量:var i=10(必须初始化,否则编译报错,一旦初始化完成过后类型就会确定,不能再赋予其他类型的值,即i不能赋值为“abc”或者2.0等非int类型的值)
查看全部 -
jdk11标准的http请求,可以不用依赖第三方的http工具包
查看全部 -
优化64位架构
查看全部 -
methodhandler相较于反射更轻量级:
1.本质上讲两个都是在模拟方法的调用,但Reflection是模拟java代码层次的调用,而MethodHandle是模拟的字节码层次的,上面的例子中是模拟的invokevirtual指令。
2.Reflection是重量级的,而MethodHandle是轻量级的。
最重要的是,Reflection 只为java服务,而MethodHandle则可以服务于所有的运行在java虚拟机上的语言。
public class MethodHandlerTest { static class A { public void println(String s) { System.err.println("i am class A:" + s); } } public static void main(String[] args) throws Throwable { Object object = System.currentTimeMillis() % 2 == 0 ? System.out : new A(); //无论 object是要那个实现类,下面的都能正确调用 到println方法 getPrintlnMh(object).invokeExact("lisj"); } private static MethodHandle getPrintlnMh(Object target) throws Exception { MethodType methodType = MethodType.methodType(void.class, String.class); return MethodHandles.lookup().findVirtual(target.getClass(), "println", methodType).bindTo(target); } }
查看全部 -
jdk11之前的版本通过反射访问private修饰的属性成员需field.setaccessable(),而jdk11则不需要设置
查看全部 -
export JAVA_11_HOME=...
export JAVA_12_HOME=...
export JAVA_HOME=$JAVA_11_HOME
alias jdk11="export JAVA_HOME=$JAVA_11_HOME"
alias jdk12="export JAVA_HOME=$JAVA_12_HOME"
通过配置可以设置默认jdk以及动态切换jdk版本,比如这个配置默认是使用jdk11,如果想使用jdk12的话只要只想jdk12即可实现切换
查看全部 -
摘要
开发一个处理内存分配但不实现任何实际内存回收机制的GC。一旦可用的Java堆耗尽,JVM将关闭。
目标
提供完全被动的GC实现,具有有限的分配限制和尽可能低的延迟开销,但代价是内存占用和内存吞吐量。成功的实现是孤立的代码更改,不会触及其他GC,并且在JVM的其余部分中进行最小的更改。
查看全部 -
Unicode10执行结果为图形
查看全部 -
JEP 327:Unicode 10
http://openjdk.java.net/jeps/327
摘要
升级现有的平台API,支持10.0版本中的Unicode标准。
http://unicode.org/versions/Unicode10.0.0/
目标
支持最新版本的Unicode,主要在以下类中:
Character
并且String
在java.lang
封装NumericShaper
在java.awt.font
包中,和Bidi
,BreakIterator
和Normalizer
在java.text
包中。
非目标
此JEP将不会实现四个相关的Unicode规范:
UTS#10,Unicode校对算法
UTS#39,Unicode安全机制
UTS#46,Unicode IDNA兼容性处理
UTS#51,Unicode表情符号
动机
Unicode是一个不断发展的行业标准,因此我们必须使Java与最新版本保持一致。
描述
Java SE 10实现了Unicode 8.0。Unicode 9.0增加了7,500个字符和6个新脚本,Unicode 10.0.0增加了8,518个字符和4个新脚本。此升级将包括Unicode 9.0更改,因此将添加总共16,018个字符和10个新脚本。
查看全部 -
JEP 323:Lambda参数的本地变量语法
http://openjdk.java.net/jeps/323
摘要
允许
var
在声明隐式类型的lambda表达式的形式参数时使用。目标
将隐式类型的lambda表达式中的形式参数声明的语法与局部变量声明的语法对齐。
非目标
将任何其他类型的变量声明(例如,方法的形式参数)的语法与局部变量声明的语法对齐。
动机
一个lambda表达式可以被隐式类型,其中类型的所有形式参数都推断出:
(x, y) -> x.process(y) // implicitly typed lambda expression
Java SE 10使隐式类型可用于局部变量:
var x = new Foo(); for (var x : xs) { ... } try (var x = ...) { ... } catch ...
为了与局部变量保持一致,我们希望允许'var'用于隐式类型的lambda表达式的形式参数:
(var x, var y) -> x.process(y) // implicit typed lambda expression
统一性的一个好处是修饰符,特别是注释,可以应用于局部变量和lambda形式,而不会失去简洁性:
@Nonnull var x = new Foo(); (@Nonnull var x, @Nullable var y) -> x.process(y)
描述
对于隐式类型的lambda表达式的形式参数,允许使用保留的类型名称
var
,以便:(var x, var y) -> x.process(y)
相当于:
(x, y) -> x.process(y)
隐式类型的lambda表达式必须
var
用于其所有形式参数,或者不能用于任何形式参数。此外,var
仅允许隐式类型化lambda表达式的形式参数---显式类型化的lambda表达式继续为其所有形式参数指定清单类型,因此某些形式参数不允许其他人使用清单类型var
。以下示例是非法的:(var x, y) -> x.process(y) // Cannot mix 'var' and 'no var' in implicitly typed lambda expression (var x, int y) -> x.process(y) // Cannot mix 'var' and manifest types in explicitly typed lambda expression
从理论上讲,有一个lambda表达式可能就像上面的最后一行一样,它是半显式类型(或半隐式类型,取决于你的观点)。但是,它超出了此JEP的范围,因为它会深刻影响类型推断和重载决策。这是保持lambda表达式必须指定所有清单参数类型或不指定的限制的主要原因。我们还希望强制推断隐式类型化lambda表达式的参数的类型是否相同无论是否
var
使用。我们可能会在未来的JEP中回到局部推断的问题。此外,我们不希望损害简写语法的简洁性,因此我们不允许使用以下表达式:var x -> x.foo()
查看全部 -
JEP 321:HTTP客户端(标准)
http://openjdk.java.net/jeps/321
摘要
通过JEP 110标准化JDK 9中引入的孵化 HTTP客户端API ,并在JDK 10中进行更新。
目标
考虑孵化的API收到的反馈,
在
java.net.http
包中提供基于孵育的API 的标准化 API,和删除孵化的API。
动机
这个JEP的动机与JEP 110的动机保持一致 。
查看全部
举报