java runtime cpu_Java中Runtime类详细总结

Runtime类简介

Java中,Runtime类提供了许多的API 来与java runtime environment进行交互,如:

执行一个进程。

调用垃圾回收。

查看总内存和剩余内存。

Runtime是单例的,可以通过Runtime.getRuntime()得到这个单例。

API列表

public static Runtime getRuntime()

返回单例的Runtime实例

public void exit(int status)

终止当前的虚拟机

public void addShutdownHook(Thread hook)

增加一个JVM关闭后的钩子

public Process exec(String command)throws IOException

执行command指令,启动一个新的进程

public int availableProcessors()

获得JVM可用的处理器数量(一般为CPU核心数)

public long freeMemory()

获得JVM已经从系统中获取到的总共的内存数【byte】

public long totalMemory()

获得JVM中剩余的内存数【byte】

public long maxMemory()

获得JVM中可以从系统中获取的最大的内存数【byte】

注:以上为列举的比较常见的一些方法,不完全。

经典案例

exec

@Test

public void testExec(){

Process process = null;

try {

// 打开记事本

process = Runtime.getRuntime().exec("notepad");

Thread.sleep(2000);

} catch (IOException | InterruptedException e) {

e.printStackTrace();

}finally {

if(process != null){

process.destroy();

}

}

}

获取信息

@Test

public void testFreeMemory(){

Runtime r = Runtime.getRuntime();

System.out.println("处理器个数: " + r.availableProcessors());

System.out.println("最大内存 : " + r.maxMemory());

System.out.println("总内存 : " + r.totalMemory());

System.out.println("剩余内存: " + r.freeMemory());

System.out.println("最大可用内存: " + getUsableMemory());

for(int i = 0; i < 10000; i ++){

new Object();

}

System.out.println("创建10000个实例之后, 剩余内存: " + r.freeMemory());

r.gc();

System.out.println("gc之后, 剩余内存: " + r.freeMemory());

}

/**

* 获得JVM最大可用内存 = 最大内存-总内存+剩余内存

*/

private long getUsableMemory() {

Runtime r = Runtime.getRuntime();

return r.maxMemory() - r.totalMemory() + r.freeMemory();

}

处理器个数: 4

最大内存 : 3787980800

总内存 : 255328256

剩余内存: 245988344

最大可用内存: 3778640888

创建10000个实例之后, 剩余内存: 244650952

gc之后, 剩余内存: 252594608

注册钩子线程

@Test

public void testAddShutdownHook() throws InterruptedException {

Runtime.getRuntime().addShutdownHook(new Thread(()-> System.out.println("programming exit!")));

System.out.println("sleep 3s");

Thread.sleep(3000);

System.out.println("over");

}

3s之后,test方法结束,打印信息。

取消注册钩子线程

@Test

public void testRemoveShutdownHook() throws InterruptedException {

Thread thread = new Thread(()-> System.out.println("programming exit!"));

Runtime.getRuntime().addShutdownHook(thread);

System.out.println("sleep 3s");

Thread.sleep(3000);

Runtime.getRuntime().removeShutdownHook(thread);

System.out.println("over");

}

终止!

@Test

public void testExit(){

Runtime.getRuntime().exit(0);

//下面这段 无事发生

System.out.println("Program Running Check");

}

参考阅读

### 如何在Java项目中使用ONNX Runtime GPU进行推理部署 为了在Java项目中成功配置并使用ONNX Runtime GPU版本进行推理,需遵循特定的环境设置流程以及依赖项管理。由于官方支持可能有限制,在ARM架构服务器上尤其如此[^1]。 #### 1. 安装必要的硬件驱动程序和库 确保已正确安装NVIDIA CUDA Toolkit与cuDNN库,并验证其兼容性。这些组件对于启用GPU加速至关重要。此外,还需确认操作系统内核参数已被适当调整以允许设备访问。 #### 2. 添加Maven依赖到pom.xml文件 通过引入`onnxruntime` Maven仓库中的相应工件来集成ONNX Runtime Java API。注意区分不同平台下的预构建二进制包;针对Linux-x86_64系统可采用如下方式: ```xml <dependency> <groupId>com.microsoft.onnxruntime</groupId> <artifactId>onnxruntime-linux-x86_64-gpu</artifactId> <version>1.13.0</version> </dependency> ``` 对于其他体系结构,则应查阅最新文档获取确切坐标[^3]。 #### 3. 初始化OnnxSession实例 创建用于加载模型定义及执行预测操作的核心——`OrtEnvironment` 和 `OrtSession.SessionOptions` 对象。这里特别强调要指定使用哪个计算资源(即CPU还是GPU),这可以通过向会话选项传递额外属性实现: ```java // 创建全局唯一的 OrtEnvironment 实例 final var env = new OrtEnvironment.getEnvironment(); // 设置 SessionOption 使用 GPU 设备 var sessionOptions = (new OrtSession.SessionOptions()) .addConfigEntry("session.set_cuda_exclusive_device", "true"); try (var session = env.createSession(modelPath, sessionOptions)) { // 执行推理... } finally { env.release(); } ``` 上述代码片段展示了如何强制独占模式下占用单个GPU设备,从而避免多线程竞争带来的潜在问题[^2]。 #### 4. 处理异常情况 考虑到实际应用环境中可能出现的各种意外状况,建议开发者充分测试应用程序的行为表现,尤其是在切换至新硬件或软件栈之后。如果遇到似于C#环境下描述过的崩溃现象,务必开启详细的日志记录以便排查原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值