首页
学习
活动
专区
圈层
工具
发布

Java9的新特性

Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 序 本文主要讲述一下Java9的新特性 特性列表 完整的特性详见...系列(三)模块系统精要 java9 opens与exports的区别 java9迁移注意事项 java9 module相关选项解析 G1成为默认垃圾回收器 相关JEP: JEP 248: Make G1...的 现在java9可以直接利用jdk内置的集合工厂,比如 List.of(1,2,3,4,5); Set.of(1,2,3,4,5); Map.of("key1","value1","key2","value2...新引入的jlink可以精简化jdk的大小,外加Alpine Linux的docker镜像,可以大大减少java应用的docker镜像大小,同时也支持了Docker的cpu和memory限制(Java SE...的区别 java9迁移注意事项 java9 gc log参数迁移 java9 module相关选项解析 使用maven构建java9 service实例 使用示例带你提前了解 Java 9 中的新特性

98920
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【大牛经验】Java9的新特性

    我们将快速的,着重的浏览其中的几个新特性: 模块化系统–Jigsaw 项目 模块化是一个很通用的概念。...但是Java 7中钻石操作符不允许在匿名类上使用。但在Java 9中改善了这一情况,允许钻石操作符在匿名类上使用。下面的例子只有在Java 9中才能通过编译。...注释SafeVarargs范围的延伸 直到Java 8,@SafeVarargs才能在静态方法、final方法和构造器上使用。但是这些方法或者构造器是不能被覆盖的。...这些方法中缺少另一个不能被覆盖的方法,这个方法就是私有方法。Java 9可以将@SafeVarargs添加到私有方法上。...下面的例子在Java 9中是正确的,但是在Java 8中就会抛出编译时错误: 注释@SafeVarargs不能在非final的实例方法iAmSafeVaragrsMethod上使用。

    1K80

    java9 opens与exports的区别

    序 本文主要研究下java9 opens与exports的区别 open及exports open open module 主要用于解决deep reflection问题,open的作用是表示该模块下的所有的包在...runtime都允许deep reflection(包括public及private类型) 但是编译时期,仅仅允许该module中声明过exports的包可以访问,如果没有exports则该包的类在编译时期不可读...opens package 用于声明该模块的指定包在runtime允许使用反射访问 exports 表示允许在编译时和运行时访问指定包的public成员 open及exports对反射的影响 反射方法...小结 open表示允许运行时通过反射使用open的作用是表示该模块下的所有的包在runtime都允许deep reflection(包括public及private类型);opens package的作用只是允许该包在...runtime都允许deep reflection open及opens都仅仅是开放runtime时期的可以通过反射访问(蕴含了运行时的exports)。

    59820

    【大牛经验】Java9的新特性

    【大牛经验】Java9的新特性 Java 9 包含了丰富的特性集。虽然Java 9没有新的语言概念,但是有开发者感兴趣的新的API和诊断命令。 我们将快速的,着重的浏览其中的几个新特性: ?...但是Java 7中钻石操作符不允许在匿名类上使用。但在Java 9中改善了这一情况,允许钻石操作符在匿名类上使用。下面的例子只有在Java 9中才能通过编译。 ?...注释SafeVarargs范围的延伸 直到Java 8,@SafeVarargs才能在静态方法、final方法和构造器上使用。但是这些方法或者构造器是不能被覆盖的。...这些方法中缺少另一个不能被覆盖的方法,这个方法就是私有方法。Java 9可以将@SafeVarargs添加到私有方法上。...下面的例子在Java 9中是正确的,但是在Java 8中就会抛出编译时错误: 注释@SafeVarargs不能在非final的实例方法iAmSafeVaragrsMethod上使用。 ?

    67930

    Java9中的GC调优基础

    JDK的维护者在GC选择上一直是比较保守的,G1从JDK 1.6时代就开始进入开发者的视野,直到今天正式成为Hotspot的默认GC,也是走了很长的路。...在老年代中进行压缩 在上一条的基础上,将还存活的对象进行压缩(CMS和G1的行为与此有些不同之处),压缩的过程就是将存活的对象从老年代的起点进行挨个复制,使得老年代维持在一片连续的内存中,消除内存碎片,...G1会在平衡吞吐和响应时延的基础上,尽可能的满足用户的需求。它适用的JVM往往有以下特征: 堆的大小可能达到数十G(或者更大),同时存活的对象数量也很多。...注意传统的VM参数-XX:+PrintGCDetails在Java9中已经废弃,会有Warning信息。...上存活的对象拷贝到Suvivor区域,这里会将很多个对象从多个不同的区域拷贝到少数的几个区域内,所以这一步在G1中叫做疏散(Evacuation),同时把Suvivor上触及年龄阈值的对象晋升到老年代区域

    84670

    Java9 中的 9 个新特性

    Java 平台级模块系统 Java 9 的定义功能是一套全新的模块系统。当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。...你的应用程序模块现在将声明其对其他应用程序模块的依赖以及对其所使用的 JDK 模块的依赖。为什么不使用这些信息创建一个最小的运行时环境,其中只包含运行应用程序所需的那些模块呢?...事实上,从工厂方法返回已放入数个元素的集合实现是高度优化的。这是可能的,因为它们是不可变的:在创建后,继续添加元素到这些集合会导致 “UnsupportedOperationException” 。...多版本兼容 JAR 我们最后要来着重介绍的这个特性对于库的维护者而言是个特别好的消息。当一个新版本的 Java 出现的时候,你的库用户要花费数年时间才会切换到这个新的版本。...这就意味着库得去向后兼容你想要支持的最老的 Java 版本 (许多情况下就是 Java 6 或者 7)。这实际上意味着未来的很长一段时间,你都不能在库中运用 Java 9 所提供的新特性。

    1.2K90

    字节码调试的入口 —— JVM 的寄生插件 javaagent 那些事

    Javaagent 介绍 Javaagent 是一个特殊的 jar 包,它并不能单独启动的,而必须依附于一个 JVM 进程,可以看作是 JVM 的一个寄生插件,使用 Instrumentation 的...Agent 的两种使用方式 它有两种使用方式: 在 JVM 启动的时候加载,通过 javaagent 启动参数 java -javaagent:myagent.jar MyMain,这种方式在程序 main...,代码中有一个 main 方法,每隔 3s 输出 foo 方法的返回值 100,接下来动态 Attach 上 MyTestMain 进程,修改 foo 的字节码,让 foo 方法返回 50。...:github.com/arthur-zhan… 动态 Attach 的 agent 与通过 JVM 启动 javaagent 参数指定的 agent jar 包的方式有所不同,动态 Attach 的...这个过程如下图所示: 小结 本文讲解了 javaagent,一起来回顾一下要点: 第一,javaagent 是一个使用 instrumentation 的 API 用来改写类文件的 jar 包,可以看作是

    1.2K20

    认识 JavaAgent --获取目标进程已加载的所有类

    Java RASP也是基于JavaAgent实现的。趁热记录下JavaAgent基础概念,以及简单使用JavaAgent实现一个获取目标进程已加载的类的测试。...方法,在这个方法里会去调用 javaagent 中 MANIFEST.MF 里指定的Premain-Class 类的 premain 方法 下面是一个简单的例子(在JDK1.8.0_181进行了测试):...小结 •文中只是描述了JavaAgent相关的一些基础的概念,目的只是知道有这个东西,然后验证下之前遇到的一个问题。...Java RASP相关文章[2]&[3],如果自己要写基于RASP的漏洞检测/利用工具的话也可以借鉴到这些思路代码放到了github[7]上,有兴趣的可以去测试下,注意pom.xml文件中的jdk版本,...7.https://github.com/longofo/learn-javaagent

    2.6K10

    Java9 中的 9 个新特性

    Java 平台级模块系统 Java 9 的定义功能是一套全新的模块系统。当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。...Linking 当你使用具有显式依赖关系的模块和模块化的 JDK 时,新的可能性出现了。你的应用程序模块现在将声明其对其他应用程序模块的依赖以及对其所使用的 JDK 模块的依赖。...事实上,从工厂方法返回已放入数个元素的集合实现是高度优化的。这是可能的,因为它们是不可变的:在创建后,继续添加元素到这些集合会导致 “UnsupportedOperationException” 。...多版本兼容 JAR 我们最后要来着重介绍的这个特性对于库的维护者而言是个特别好的消息。当一个新版本的 Java 出现的时候,你的库用户要花费数年时间才会切换到这个新的版本。...这就意味着库得去向后兼容你想要支持的最老的 Java 版本 (许多情况下就是 Java 6 或者 7)。这实际上意味着未来的很长一段时间,你都不能在库中运用 Java 9 所提供的新特性。

    90090

    2017年3月Java9带来的革新!

    一:计划 2016-05-26: 功能开发完成 2016-08-11: 执行测试 2016-09-01: 开始减速 2016-10-20: 零错误反弹(注:指在项目中的某一点上,开发活动最终赶上了测试的步伐...212: 解析 Lint 和 Doclint 告警 213: 打磨Coin项目:(译注:Coin是一个改进Java语法使用性的项目) 214: 移除 JDK 8 中废弃的GC组合 215: 让 javac...PKCS12 秘钥库 231: 移除启动时对JRE版本的选择 232: 改进应用安全性能 233: 自动生成运行时编译器测试用例 235: 测试 javac 生成的 class 文件属性 236: 为...TIFF 图像 I/O 263: 在 Windows 和 Linux 上支持 HiDPI 图像 264: 提供平台日志 API 与服务 265: Marlin 图像渲染器 266: 更新 Concurrency...HotSpot C++ 单元测试框架 282: jlink:Java链接器 283: 在Linux上采用 GTK 3 284: 新的 HotSpot 构建系统 285: Spin-Wait Hints

    1.2K40

    JDK9新特性:Java9的编程革新之旅

    这篇博客是为所有Java猎人准备的,不论是初探Java森林的小猫还是在编程世界里游走多年的老虎。我将提供详尽的知识点讲解、丰富的代码示例和详细的操作指南,确保每位猎人都能轻松理解Java 9的精髓。...此前,Java的类和包系统在大型项目中往往导致了复杂且难以管理的“JAR地狱”。模块系统通过引入模块概念,从根本上改变了这一现状。...流API的增强 介绍 嗨喵,Java的小猎人们,让我们来看看Java 9给流API带来的那些令人兴奋的增强吧!...未来的Java版本必将携带更多令人振奋的特性和改进而来,无论是在性能优化、编程模型简化,还是在新功能创新上。...让我们一起期待着这个充满创造力的编程世界的未来,继续在Java的森林中探险,发现更多的未知和奇迹!Java的未来充满了无限的可能,等待着我们去探索和创造。

    34410

    JAVA9模块化详解(二)——模块的使用

    JAVA9模块化详解(二)——模块的使用 二、模块的使用 各自的模块可以在模块工件中定义,要么就是在编译期或者运行期嵌入的环境中。...2.2 解决方案 假设我们有一个应用,它使用了上一章讲到的com.foo.bar模块,也用到了java.sql模块,包含了应用核心的模块声明如下: module com.foo.app { requires...2.5 隐性可读性 如果一个模块读取另一个,在某种情况下,它在逻辑上也读取其他的一些模块。...于是,我们扩展了模块声明,一个模块可以把可读性授权给另外的,依赖它的模块,扩展可读性的表达式(public)在requires项上,如下所示: module java.sql { requires...至此,JAVA9模块化详解(二)——模块的使用就先介绍到这里,这个系列还会继续,请大家多多支持,有不妥之处,还请大家多多交流。

    97320

    基于JavaAgent的全链路监控三《ByteBuddy操作监控方法字节码》

    案例简述 在第二章中我们已经可以监控方法执行耗时,虽然它能完成我们一些基本需要,但是为了增强代码的扩展性,我们需要使用字节码操作工具ByteBuddy来帮助我们实现更完善的监控程序。...环境准备 1、IntelliJ IDEA Community Edition 2、jdk1.8.0_45 64位 配置信息(路径相关修改为自己的) 1、配置位置:Run/Debug Configurations...-> VM options 2、配置内容:-javaagent:E:\itstack\GIT\itstack.org\itstack-demo-agent\itstack-demo-agent-03\...+ " 方法耗时:" + (System.currentTimeMillis() - start) + "ms"); } } } MyAgent.java /** * javaagent...http://bugstack.cn * 公众号:bugstack虫洞栈 {获取学习源码} * create by fuzhengwei on 2019 * * VM options: * -javaagent

    2.3K30

    JAVA9模块化详解(二)——模块的使用

    二、模块的使用 各自的模块可以在模块工件中定义,要么就是在编译期或者运行期嵌入的环境中。为了提供可靠的配置和强健的封装性,在分块的模块系统中利用他们,必须确定它们的位置,然后决定他们如何关联彼此。...2.2 解决方案 假设我们有一个应用,它使用了上一章讲到的com.foo.bar模块,也用到了java.sql模块,包含了应用核心的模块声明如下: module com.foo.app { requires...2.5 隐性可读性 如果一个模块读取另一个,在某种情况下,它在逻辑上也读取其他的一些模块。...于是,我们扩展了模块声明,一个模块可以把可读性授权给另外的,依赖它的模块,扩展可读性的表达式(public)在requires项上,如下所示: module java.sql { requires...至此,JAVA9模块化详解(二)——模块的使用就先介绍到这里,这个系列还会继续,请大家多多支持,有不妥之处,还请大家多多交流。

    53320
    领券