JDK9已经出来有一段时间了,因此很多流行的Java应用纷纷增添了对JDK9乃至JDK10的支持,比如Tomcat。
我们通过这个链接下载最新的Tomcat源文件包,总共7MB:
https://tomcat.apache.org/download-90.cgi
解压之后,在文件夹apache-tomcat-9.0.10-srcjavaorgapachecatalinacore里找到文件JreMemoryLeakPreventionListener.java:
可以看到大量调用工具类JreCompat检测JRE9是否可用:
JreCompat.isJre9Available()
查看isJre9Available的具体实现:
public static boolean isJre9Available() {
return jre9Available;
}
被一个boolean控制:jre9Available。
jre9Available这个boolean被Jre9Compat.isSupported()控制:
static {
// This is Tomcat 9 with a minimum Java version of Java 8.
// Look for the highest supported JVM first
if (Jre9Compat.isSupported()) {
instance = new Jre9Compat();
jre9Available = true;
} else {
instance = new JreCompat();
jre9Available = false;
}
}
再看Jre9Compat.isSupported()的代码:
static boolean isSupported() {
return inaccessibleObjectExceptionClazz != null;
}
一旦inaccessibleObjectExceptionClazz不为null,说明JRE9可用。
inaccessibleObjectExceptionClazz来自Class.forName("java.lang.reflect.InaccessibleObjectException"),
java.lang.reflect.InaccessibleObjectException这个类正是Java 9引入的。因此如果用Class loader加载不到这个类,一定说明当前的运行环境是Java 9以下。
通过这种方式进行Java运行环境的检测比System.getProperty准确,因为后者获取的信息理论上有可能被别人用setProperty覆盖。
ABAP
通过表CVERS查看Software component的版本信息:
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
相关推荐
在Java代码中,你可以使用`SystemUtils`来判断当前运行环境,例如: ```java import org.apache.commons.lang3.SystemUtils; public class Main { public static void main(String[] args) { if (SystemUtils.IS...
像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...
支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,...
5. **classpath设置**:如果不设置classpath环境变量,Java虚拟机会默认将其设置为".",即当前目录,这意味着Java会在这个目录下查找类文件。 6. **JDK安装路径**:JDK的安装路径是可以自定义的,用户在安装过程中...
在开发过程中,我们需要验证服务是否可用,通常可以通过访问服务的WSDL地址来判断。如果能够成功加载服务的WSDL文档,并且没有出现错误信息,则说明该服务是可以正常被调用的。 #### 五、生成代理类 为了方便地...
19. **内存管理**:Java通过垃圾回收机制自动回收不再使用的对象,但不会立即释放。 20. **封装**:封装是面向对象编程的核心原则之一,隐藏实现细节,提供公共接口。 21. **类与对象**:类是对象的模板,对象是类...
### Java 判断题知识点解析 #### 1. Java 核心源码包位置 - **题目**: Java 核心源码包存放在 JDK 安装目录的 bin 目录下。 - **答案**: 错误 - **解析**: 实际上,Java 的核心源码包(`src.zip` 文件)位于 JDK ...
像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 ...
像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 ...
以下是一个简单的Java代码示例,展示如何获取`JAVA_HOME`环境变量的值: ```java public class JdkPathFinder { public static void main(String[] args) { String javaHome = System.getenv("JAVA_HOME"); if ...
这个脚本首先通过`command -v java`检查Java是否在PATH环境变量中,然后使用`java`命令执行Java程序。`JAVA_CLASS_PATH`指定了类路径,这里我们设置为当前目录,因为`HelloWorld.class`就在当前目录下。`MAIN_CLASS`...
- **JRE(Java Runtime Environment)**:Java运行时环境包含了运行Java应用程序所需的所有软件,包括JVM以及Java核心类库等。JRE是用户运行Java程序的基础环境。 - **JDK(Java Development Kit)**:Java开发工具...
"java面试题精选题目" 本文涵盖了 Java 面试中常见的知识点,涵盖了 Java 虚拟机...它的工作原理是通过判断当前内存是否为垃圾对象,如果是,则释放其占用的内存空间。这种机制可以避免内存泄漏和过度消耗内存的问题。
- 应用场景:根据Java版本判断是否支持某些新特性。 2. **`java.vendor`** - 描述:Java运行时环境供应商。 - 示例代码:`System.getProperty("java.vendor")` - 应用场景:确定使用的是哪个供应商的JRE。 3....
Java的设计哲学是“一次编写,到处运行”(Write Once, Run Anywhere),这意味着Java代码可以在任何支持Java的平台上运行,无需重新编译。 总之,Java语言涵盖了丰富的编程概念和技术,从基本语法到面向对象编程,...
建议同时安装JRE和JDK,这样可以确保在开发过程中有足够的支持,并且能够在不同的环境中运行Java程序。 ##### 1.2 Java程序运行流程 Java程序的运行过程大致如下: 1. 编写Java源代码,文件扩展名为`.java`。 2. ...
2. Java Applet:是Java早期用于在网页中嵌入小程序的技术,可以让浏览器支持运行Java代码。 3. Java MouseListener:Java中的鼠标事件监听器接口,可以通过实现这个接口来响应鼠标事件,实现交互式应用。 4. Java...
支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,...
JDK(Java Development Kit)是Java开发的核心工具集,包含了JRE(Java Runtime Environment),它是运行Java应用程序所需的环境。在安装JDK时,用户可以根据需求选择安装目录。JDK的安装目录包含多个子目录,如bin...
- **跨平台**:Java的“一次编写,到处运行”(Write Once, Run Anywhere,WORA)特性得益于Java虚拟机(JVM),使得Java代码可以在任何安装了JVM的平台上运行。 - **有类库**:Java拥有丰富的类库,如Java ...