如何通过Java代码判断当前的环境是否支持JRE 9
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代码判断当前的环境是否支持JRE 9的更多相关文章
- java 代码判断图片格式后缀名称
/** * 图片判断 */ private static String getFormatName(Object o) { try { // Create an image input stream ...
- java代码判断图片文件格式, 不是根据文件后缀来判断。
public static final String TYPE_JPG = "jpg"; public static final String TYPE_GIF = "g ...
- java 代码中设置 临时 环境变量
System.setProperty("hadoop.home.dir", "D:\\software\\software_install\\dev_install\\h ...
- java代码判断文件类型(判断文件后缀名)
1.两点需要注意 1.string.spilt("\\.")分割字符串成子字符串数组,以“.”分割,必须写成string.spilt("\\.")的方式,不能写 ...
- CXF wsdl2java 生成java代码供客户端使用
CXF wsdl2java 生成java代码供客户端使用 环境配置:1.下载apache-cxf-2.6.2在环境变量中配置CXF_HOME 值为E:\gavin\cxf\apache-cxf-3.0 ...
- 如何判断一个GPS点是否在以另一个GPS点为圆心100米为半径的圆内(Java代码)
题目乍一看,无从下手,仔细想了一下,原来只需要判断两个GPS点的直线距离是否<100米即可. Java代码如下: /** * 将两个经纬度坐标转化成距离(米) * * @param 2个GPS经 ...
- 开发环境,eclipse编辑器java代码自动提示
Eclipse+ADT+Android SDK 搭建安卓开发环境 eclipse编辑器java代码自动提示 window-->Preferences-->JAva-->Content ...
- 如何在Java代码中使用SAP云平台CloudFoundry环境的环境变量
本文使用的例子源代码在我的github上. 在我的公众号文章在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务介绍了如何通过Cloud Connector ...
- Tomcat7设置环境变量供java代码读取
前两天要做一个后台线程分片处理任务功能,把应用放在tomcat中部署在多个服务器上,每个服务器分片处理一些任务,这里需要在java代码中获取到tomcat的信息和服务器信息.在网上找了好久,终于找到了 ...
随机推荐
- UIDynamic 基础
一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 如:重力.弹性碰撞 ...
- string类中运算符重载实现
C++中预定义的加.减等运算符的操作对象只能是基本的数据类型.如果要在用户自定义的类型对象上应用同样的运算符,就需要通过运算符重载来重新定义其实现,使它能够用于自定义类型执行特定的操作,所以运算符重载 ...
- cocos2dx常见32种场景切换动画
bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !CCLayer::init( ...
- JDK7中匿名内部类中使用局部变量要加final,JDK8中不需要,但jdk会默认加上final
今天看书的时候看到了局部内部类,书上说局部内部类可以访问局部变量,但是必须是final的.因为局部变量在方法调用之后就消失了,使用final声明的话该局部变量会存入堆中,和内部类有一样的声明周期.但是 ...
- mysql连接过多-报错
有两种方法: 1,错误连接参数 max_connect_errors,在配置文件中调整增大. 比如:修改mysql配置文件,在[mysqld]字段下面添加 max_connect_errors=102 ...
- 洛谷 - P1309 - 瑞士轮 - 归并排序
https://www.luogu.org/problemnew/show/P1309 一开始写的直接快排没想到真的TLE了. 想到每次比赛每个人前移的量不会很多,但是不知从哪里开始优化. 搜索一下原 ...
- GraphicsLab Project学习项目
作者:i_dovelemon 日期:2016 / 05 / 30 主题:3D,Graphics 引言 进公司以来,主要在学习的就是如何保证代码的质量,以前热爱的图形学也放置了.但是,作为游戏程序员,特 ...
- Luogu P2326 AKN's PPAP【按位贪心】
题目描述 “I have a pen,I have an apple.Eh,Apple-Pen!. I have a pen,I have pineapple.En,Pineapple-Pen! Ap ...
- Django Views and URLconfs
碧玉妆成一树高,万条垂下绿丝绦. 不知细叶谁裁出,二月春风似剪刀. 原文尽在:http://djangobook.com/ 转载请注明出处:http://www.cnblogs.com/A-FM/p/ ...
- hdu1068 Girls and Boys 匈牙利算法(邻接表)
#include <cstdio> #include <algorithm> #include <cstring> #include <vector> ...