当前位置: 首页 > news >正文

java9学习笔记-part2

进程 API

在 Java 9 之前,Process API 仍然缺乏对使用本地进程的基本支持,例如获取进程的 PID 和所有者,进程的开始时间,进程使用了多少 CPU 时间,多少本地进程正在运行等。

Java 9 向 Process API 添加了一个名为 ProcessHandle 的接口来增强 java.lang.Process 类。

ProcessHandle 接口的实例标识一个本地进程,它允许查询进程状态并管理进程。

ProcessHandle 嵌套接口 Info 来让开发者逃离时常因为要获取一个本地进程的 PID 而不得不使用本地代码的窘境。

我们不能在接口中提供方法实现。如果我们要提供抽象方法和非抽象方法(方法与实现)的组合,那么我们就得使用抽象类。

ProcessHandle 接口中声明的 onExit() 方法可用于在某个进程终止时触发某些操作。

        // 获取当前正在运行的 JVM 的进程ProcessHandle currentProcess = ProcessHandle.current();// 输出进程的 idSystem.out.println(currentProcess.pid());// 输出进程的信息System.out.println(currentProcess.info());

不能使用下划线命名变量

String _ = "张三";

兼容性

 javadoc文档兼容 HTML5 标准

javadoc -encoding UTF-8 -charset UTF-8 -d [文档输出位置] -html5 [需要输出文档的文件]

javadoc -encoding UTF-8 -charset UTF-8 -d C:\JAVA\doc-java9 -html5 C:\JAVA\doc-java9\Java9Test.java

多版本兼容 jar 包

多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本。

通过 --release 参数指定编译版本。

@Deprecated

Java 9 中注解增加了两个新元素:since 和 forRemoval

  • since: 元素指定已注解的API元素已被弃用的版本。
  • forRemoval: 元素表示注解的 API 元素在将来的版本中被删除,应该迁移 API。
/*** Returns the version in which the annotated element became deprecated.* The version string is in the same format and namespace as the value of* the {@code @since} javadoc tag. The default value is the empty* string.** @return the version string* @since 9*/
String since() default "";/*** Indicates whether the annotated element is subject to removal in a* future version. The default value is {@code false}.** @return whether the element is subject to removal* @since 9*/
boolean forRemoval() default false;

钻石操作符(Diamond Operator)

钻石操作符是在 java 7 中引入的,可以让代码更易读,但它不能用于匿名的内部类。

在 java 9 中, 它可以与匿名的内部类一起使用,从而提高代码的可读性。

        List<Integer> integerList = new List<>() {@Overridepublic int size() {return 0;}@Overridepublic boolean isEmpty() {return false;}@Overridepublic boolean contains(Object o) {return false;}@Overridepublic Iterator<Integer> iterator() {return null;}@Overridepublic Object[] toArray() {return new Object[0];}@Overridepublic <T> T[] toArray(T[] a) {return null;}@Overridepublic boolean add(Integer integer) {return false;}@Overridepublic boolean remove(Object o) {return false;}@Overridepublic boolean containsAll(Collection<?> c) {return false;}@Overridepublic boolean addAll(Collection<? extends Integer> c) {return false;}@Overridepublic boolean addAll(int index, Collection<? extends Integer> c) {return false;}@Overridepublic boolean removeAll(Collection<?> c) {return false;}@Overridepublic boolean retainAll(Collection<?> c) {return false;}@Overridepublic void clear() {}@Overridepublic Integer get(int index) {return 0;}@Overridepublic Integer set(int index, Integer element) {return 0;}@Overridepublic void add(int index, Integer element) {}@Overridepublic Integer remove(int index) {return 0;}@Overridepublic int indexOf(Object o) {return 0;}@Overridepublic int lastIndexOf(Object o) {return 0;}@Overridepublic ListIterator<Integer> listIterator() {return null;}@Overridepublic ListIterator<Integer> listIterator(int index) {return null;}@Override            public List<Integer> subList(int fromIndex, int toIndex) {return Collections.emptyList();}};integerList.add(1);integerList.add(1);integerList.add(1);

new List<>()然后根据idea提示实现方法

虽然能add元素不报错,但是这样也添加不进去元素

统一JVM日志   

在Java 9中,JVM日志的管理和配置相较于之前版本有了一些改进,特别是在统一日志管理方面。以下是一些关于如何在Java 9中统一管理JVM日志的步骤和技巧:

使用-Xlog选项

Java 9引入了-Xlog选项,这是一个强大的工具,用于统一配置和记录JVM的日志。你可以使用-Xlog选项来启用或禁用不同的日志记录级别,并指定日志输出的位置。

示例

ava -Xlog:gc*:file=gc.log:time,level -jar your-application.jar

这个命令会将所有与垃圾回收(GC)相关的日志信息输出到gc.log文件中,并包含时间戳和日志级别。

配置日志级别

你可以通过-Xlog选项设置不同的日志级别,例如:

  • -Xlog:gc:启用GC日志

  • -Xlog:class+load:记录类加载事件

  • -Xlog:os+cpu:记录操作系统和CPU相关的信息

指定日志输出的位置

你可以将日志输出到文件或控制台,例如:

ava -Xlog:gc*:file=gc.log:time,level -jar your-application.jar

使用Java Management Extensions (JMX)

虽然JMX不是专门用于日志管理的,但它可以用来监控和管理JVM的各个方面,包括日志级别。你可以通过JMX来动态调整日志级别,这对于生产环境中的日志管理非常有用。

使用第三方库

对于更复杂的日志管理需求,可以考虑使用第三方库,如Log4j2或SLF4J结合Logback。这些库提供了更丰富的配置选项和更好的灵活性。例如,使用Log4j2,你可以在log4j2.xml配置文件中详细配置JVM的日志输出。

Log4j2 示例配置

<Configuration><Appenders><File name="LogFile" fileName="gc.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/></File></Appenders><Loggers><Root level="info"><AppenderRef ref="LogFile"/></Root></Loggers>
</Configuration>

日志轮转和压缩

对于生产环境,你可能还需要对日志文件进行轮转和压缩以节省空间。Java 9的-Xlog选项支持基本的文件输出功能,但对于更高级的轮转和压缩,建议使用专门的日志框架(如Log4j2)来实现。

结论

Java 9通过引入-Xlog选项为JVM日志管理提供了更直接和灵活的方式。然而,对于更复杂的场景,结合使用第三方日志框架(如Log4j2)可能会更加合适。无论选择哪种方法,确保你的日志策略能够满足你的监控、调试和生产需求。

http://www.dtcms.com/a/323479.html

相关文章:

  • rosrun 和 roslaunch 区别
  • Busybox编译、制作initramfs,并在QEMU中运行
  • 医疗健康Agent:诊断辅助与患者管理的AI解决方案
  • rotary_emb 位置编码 加速
  • 练习uart和摄像头内核驱动开发测试
  • imx6ull-驱动开发篇15——linux自旋锁
  • 2025-08-09 李沐深度学习14——经典卷积神经网络 (2)
  • 【C++】模版进阶
  • redis存储原理与数据模型
  • 复数与频谱的联系
  • 库函数蜂鸣器的使用(STC8)
  • ECML PKDD 2025 | 时间序列(Time Series)论文总结
  • “秦时明月”提前布局商标被电视剧侵权!
  • 深入理解 RedisTemplate:简化 Java 与 Redis 的交互!
  • 【系统编程】进程创建
  • 本地进行语音文字互转
  • 国内外大模型体验与评测
  • Vue2 字段值映射通用方法
  • Python 属性描述符(描述符用法建议)
  • 基于Prometheus、Grafana、Loki与Tempo的统一监控平台故障排查与解决方案
  • redis开启局域网访问
  • C++讲解---通过转换函数和运算符函数直接调用类的对象
  • Horse3D引擎研发笔记(三):使用QtOpenGL的Shader编程绘制彩色三角形
  • Aurora设计注意问题
  • 【递归、搜索和回溯】FloodFill 算法介绍及相关例题
  • 11. 为什么要用static关键字
  • 香橙派 RK3588 部署千问大模型 Qwen2-VL-2B 多轮交互式对话
  • 【工具】Python多环境管理
  • ubuntu安装ollama流程
  • Day 8: 深度学习综合实战与进阶技术 - 从优化到部署的完整流程