Runtime 是单例类
一般可以读取 CPU、内存信息
退出JVM
触发GC
注册钩子
等
CPU相关
public native int availableProcessors();
内核与逻辑处理器:
1个内核 可以包含2个逻辑处理器, 通常所说的 4核 、8核 都是指 逻辑处理器
一般这个方法,对于 线程池 设置 核心线程数和最大线程数时 使用;或者其他需要根据cpu数量来设置 资源 量时 使用。
内存相关
可以获取JVM内存信息:初始内存,最大内存,当前可用内存,单位 bytes
/**
* JVM最大内存,由 -Xmx 设置
*/
Runtime.getRuntime().maxMemory();
/**
* JVM初始最大内存,由 -Xms 设置
*/
Runtime.getRuntime().totalMemory();
/**
* JVM当前可用内存
*/
Runtime.getRuntime().freeMemory();
注册/删除JVM钩子
public void addShutdownHook(Thread hook) {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new RuntimePermission("shutdownHooks"));
}
ApplicationShutdownHooks.add(hook);
}
public boolean removeShutdownHook(Thread hook) {
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new RuntimePermission("shutdownHooks"));
}
return ApplicationShutdownHooks.remove(hook);
}
退出JVM
status >=0 正常退出
status < 0 表示异常退出
public void exit(int status) {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkExit(status);
}
Shutdown.exit(status);
}
触发JVM GC
public native void gc();
加载类库
@CallerSensitive
public void load(String filename) {
load0(Reflection.getCallerClass(), filename);
}
synchronized void load0(Class<?> fromClass, String filename) {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkLink(filename);
}
if (!(new File(filename).isAbsolute())) {
throw new UnsatisfiedLinkError(
"Expecting an absolute path of the library: " + filename);
}
ClassLoader.loadLibrary(fromClass, filename, true);
}
执行cmd命令
这个一般很少使用
public Process exec(String[] cmdarray, String[] envp, File dir)
throws IOException {
return new ProcessBuilder(cmdarray)
.environment(envp)
.directory(dir)
.start();
}