社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
(1)var关键字简介
在以前版本的Java中,我们想定义定义局部变量时。我们需要在赋值的左侧提供显式类型,并在赋值的右边提供实现类型,如下面的片段所示。
MyObject value = new MyObject();
List list = new ArrayList();
var关键字代替局部变量前面的类型修饰,从而起到简化代码的作用。这里的var不是一个数据类型,只是起到一个占位符的作用。给变量留一个保留的类型名称,在编译器当中,仍旧转化为相对应的类型。在Java 10中,你可以这样定义对象。
var value = new MyObject();
var list = new ArrayList();
我们这里的var相当于是一个标志符,所有凡是命名为var的类将不再生效。Java10里面的var和JavaScript里面的var是不相同的,JavaScript里面的var是一个弱类型,Java10里面仍然是强类型的。
(2)var关键字的适用范围
传统for循环:
for (int i = 0; i < stringList.size(); i++) {
System.out.println(stringList.get(i));
}
var关键字修饰的传统for循环:
for (var i = 0; i < stringList.size(); i++) {
System.out.println(stringList.get(i));
}
传统增强for循环:
for (int s1 : stringList) {
System.out.println(s1);
}
var关键字修饰的增强for循环:
for (var s1 : stringList) {
System.out.println(s1);
}
(3)var关键字的不适用范围
1)方法的参数
public void java10(var n){
}
2)构造函数的参数
public HelloWorld(var n){
}
3)方法的返回值类型
public var java10(){
}
4)对象的成员变量
private var name="java";
5)变量只是定义而不初始化
var x;
AppCDS通过在不同的Java进程间共享公共类元数据来减少占用空间,改善启动时间。我们可以扩展CDS以允许将归档类加载到自定义类加载器中。
决定要dump哪些类:
java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa
将内存中的类dump到归档文件中:
java -Xshare:dump -XX:+UseAppCDS -XX:SharedClassListFile=hello.lst -XX:SharedArchiveFile=hello.jsa
-Xshare:dump:表示现在要进行类的内存的 Dump。
-XX:SharedClassListFile:用来指定需要 Dump 的类的列表。
-XX:SharedArchiveFile:表示需要将类的内存 Dump 到哪个归档文件中。
使用CDS存档:
java –Xshare:on –XX:+UseAppCDS –XX:SharedAchiveFile=hello.jsa
(1)Safepoint
从线程角度看,Safepoint可以理解成是在代码执行过程中的一些特殊位置,当线程执行到这些位置的时候,说明虚拟机当前的状态是安全的,如果有需要,可以在这个位置暂停。
会用到Safepoint的一些场景:垃圾回收(GC)、debug、偏向锁等一些场合。
(2)Safepoint的不足
让所有线程都到就近的Safepoint停下来需要较长的时间,而且让所有线程都停下来对很多JVM的全局操作是没有必要的。
(3)Thread Local Handshake的作用
当线程处于Safepoint时,可以直接由线程本身或者JVM线程做回调。
这样在很多的线程操作中,可以不必要求所有的线程都进入了Safepoint再操作,大大减少了操作时间和性能开销。
(1)什么是JIT
动态编译(dynamic compilation)指的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。
JIT编译(just-in-time compilation)狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”。JIT编译是动态编译的一种特例。JIT编译一词后来被泛化,时常与动态编译等价;但要注意广义与狭义的JIT编译所指的区别。
(2)JIT编译流程图
(3)JIT的使用
如何关闭JIT(JIT默认情况是开启的):
java -Xint your_main_class_file_name
java -Djava.compiler your_main_class_file_name
如何查看JIT生成的汇编代码:
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly your_main_class_file_name
javah命令主要用于在JNI开发时,把java代码声明的JNI方法转化成CC++头文件,以便进行JNI的CC++端程序的开发。该工具已被JDK 8中添加的javac中的功能所取代。此功能提供了在编译Java源代码时编写本机头文件的功能,从而无需使用单独的工具。
(1)使用附加的 Unicode 语言标记扩展。
(2)能将堆内存占用分配给用户指定的备用内存设备。
(3)在 OpenJDK 中提供一组默认的根证书颁发机构证书。开源目前 Oracle 提供的 Java SE 的根证书,这样 OpenJDK 对开发人员使用起来更方便。
(4)JEP322,基于时间定义的发布版本,即上述提到的发布周期。版本号为$FEATURE.$INTERIM.$UPDATE.$PATCH
,分别是大版本,中间版本,升级包和补丁版本。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!