掌握Java Runtime类的核心用法

article/2025/7/31 13:25:23

Runtime 类的基本概念

Java 的 Runtime 类位于 java.lang 包中,用于与 Java 运行时环境(JVM)交互。每个 Java 应用程序都有一个 Runtime 实例,可以通过静态方法 Runtime.getRuntime() 获取。Runtime 类提供了与系统资源交互、执行外部命令和关闭 JVM 等功能。

获取 Runtime 实例

通过静态方法 getRuntime() 获取当前 JVM 的 Runtime 实例。

Runtime runtime = Runtime.getRuntime();

执行外部命令

exec() 方法用于执行操作系统的命令,返回一个 Process 对象,可以管理子进程。

Process process = runtime.exec("notepad.exe"); // 打开记事本

获取系统资源信息

Runtime 提供了多个方法获取 JVM 内存和处理器信息。

long totalMemory = runtime.totalMemory(); // 获取 JVM 总内存
long freeMemory = runtime.freeMemory();   // 获取 JVM 空闲内存
long maxMemory = runtime.maxMemory();     // 获取 JVM 最大可用内存
int processors = runtime.availableProcessors(); // 获取 CPU 核心数

垃圾回收

gc() 方法手动触发垃圾回收,释放未使用的内存。

runtime.gc(); // 请求 JVM 执行垃圾回收

关闭 JVM

halt()exit() 方法用于终止 JVM。

runtime.exit(0); // 正常退出 JVM,状态码 0
runtime.halt(1); // 强制终止 JVM,状态码 1

添加关闭钩子

addShutdownHook() 方法注册一个线程,在 JVM 关闭时执行特定任务。

Thread hook = new Thread(() -> System.out.println("JVM 正在关闭"));
runtime.addShutdownHook(hook);

示例代码

以下是一个完整的 Runtime 示例,展示内存信息和执行外部命令。

public class RuntimeExample {public static void main(String[] args) throws Exception {Runtime runtime = Runtime.getRuntime();System.out.println("总内存: " + runtime.totalMemory() / (1024 * 1024) + " MB");System.out.println("空闲内存: " + runtime.freeMemory() / (1024 * 1024) + " MB");System.out.println("最大内存: " + runtime.maxMemory() / (1024 * 1024) + " MB");Process process = runtime.exec("calc.exe"); // 打开计算器Thread.sleep(3000);process.destroy(); // 关闭进程}
}

注意事项

  • exec() 方法可能抛出 IOException,需处理异常。
  • exit()halt() 会终止 JVM,谨慎使用。
  • 执行外部命令时注意命令的跨平台兼容性。

http://www.hkcw.cn/article/PnVlgGBCEf.shtml

相关文章

如何设计自动化测试框架?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 关于测试框架的好处,比如快速回归提高测试效率,提高测试覆盖率等这里就不讨论了。这里主要讨论自动化框架包含哪些内容,以及如…

历年西安交通大学计算机保研上机真题

2025西安交通大学计算机保研上机真题 2024西安交通大学计算机保研上机真题 2023西安交通大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school 计算圆周率近似值 题目描述 根据公式 π / 4 1 − 1 / 3 1 / 5 − 1 / 7 … \pi / 4 1 - 1/3 1/5 - …

历年武汉大学计算机保研上机真题

2025武汉大学计算机保研上机真题 2024武汉大学计算机保研上机真题 2023武汉大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school 分段函数计算 题目描述 写程序计算如下分段函数: 当 x > 0 x > 0 x>0 时, f ( x ) …

LearnOpenGL-笔记-其十

今天我们要进入高级光照的环节了: Advanced Lighting 之前的学习中,我们的光照模型采用的是比较简单的phong光照模型,也就是光照强度由环境光加上漫反射光加上镜面反射组成。 用一张图足以解释: 就这么简单,针对夹…

大话软工笔记—分离原理

1. 基本概念 1.1 定义 分离原理,将研究对象中符合相同设计方法的同类项进行分离、归集。 1.2 作用 分离原理的主要作用是: (1)降低了需求分析与软件设计的复杂程度。 (2)提出了对企业构成内容按照设计…

扫地机器人苦寻新引擎,大疆们却已攻入腹地

原创 科技新知 前沿科技组 作者丨江篱 编辑丨樱木、九黎 竞争激烈的扫地机器人赛道,迎来了新玩家。 据近日相关报道,大疆扫地机器人产品已开始量产,预计将于6月份发布。消息称大疆研发扫地机器人已超过四年,即将上市的产品是扫…

【Docker管理工具】部署Docker管理面板DweebUI

【Docker管理工具】部署Docker管理面板DweebUI 一、DweebUI介绍1.1 DweebUI 简介1.2 主要特点1.3 使用场景 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载DweebUI镜像五、…

《系统集成项目管理工程师(第三版)》高效学习方法

文章目录 一、学习周期规划(总时长:3-4个月)二、每日学习时间分配表三、重难点突破策略1. 五星必考重点(占分60%+)2. 高频易错点四、高效记忆法(附实例)1. 口诀记忆法2. 联想记忆法3. 对比记忆法五、阶段目标检测六、十大管理高频整理一、十大管理ITTO高频考点表🔥 必…

新松机械臂 2001端口服务的客户端例程

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

HarmonyOS-ArkUI固定样式弹窗(1)

固定样式弹窗指的就是ArkUI中为我们提供的一些具备界面模板性质的弹窗。样式是固定的,我们可以决定在这些模板里输入什么样的内容。常见的有,警告弹窗, 列表选择弹窗, 选择器弹窗,对话框,操作菜单。 下图是本文中要讲到的基类固定样式弹窗,其中选择器弹窗没有包含在内,…

Dify运行本地和在线模型

1、运行本地模型 1.1、下载Ollama 官网下载:Ollama 1.2、安装LLM大模型 Ollama官网搜索模型,复制命令: 在终端中粘贴下载,下载完成后可以输入对话,表示安装成功。 使用命令:ollama list 可以列出已经安装…

manus对比ChatGPT-Deep reaserch进行研究类论文数据分析!谁更胜一筹?

目录 没有账号,只能挑选一个案例 1、manus的效果 Step-1:直接看结果 Step-2:看看其他文件的细节 Step-3:看最终报告 2、Deep reaserch 3、Deep reaserch进行行业分析 总结一下: 大家好这里是学术Anan&#xff…

2025年大一ACM训练-尺取

2025年大一ACM训练-尺取 ​​尺取法(Sliding Window): ​​1. 基本概念​​   尺取法(又称滑动窗口法)是一种​​通过维护窗口的左右边界来高效解决子区间问题​​的算法技巧,常用于:   1…

第十二章 MQTT会话

系列文章目录 第一章 总体概述 第二章 在实体机上安装ubuntu 第三章 Windows远程连接ubuntu 第四章 使用Docker安装和运行EMQX 第五章 Docker卸载EMQX 第六章 EMQX客户端MQTTX Desktop的安装与使用 第七章 EMQX客户端MQTTX CLI的安装与使用 第八章 Wireshark工具的安装与使用 …

【C++】C++入门基础

本文是小编巩固自身而作,如有错误,欢迎指出! 1.C的第一个程序 C兼容C语⾔绝⼤多数的语法,所以C语⾔实现的hello world依旧可以运⾏,C中需要把定义⽂件 代码后缀改为.cpp,vs编译器看到是.cpp就会调⽤C编译…

iEKF的二维应用实例

如果熟悉 EKF 与卡尔曼的推导的话,iEKF 就比较容易理解,关于卡尔曼滤波的推导以及EKF,可以参考以前的文章: 卡尔曼滤波原理:https://blog.csdn.net/a_xiaoning/article/details/130564473?spm1001.2014.3001.5502 E…

[IMX] 10.串行外围设备接口 - SPI

代码链接:GitHub - maoxiaoxian/imx 参考资料: https://zhuanlan.zhihu.com/p/290620901 SPI协议详解 - bujidao1128 - 博客园 SPI总线协议及SPI时序图详解 - Ady Lee - 博客园 目录 1.SPI 简介 2.I.MX6U ECSPI 简介 2.1.控制寄存器 1 - ECSPIx_CO…

评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡

评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡 一、评论功能的核心架构设计 评论功能看似简单,实则涉及复杂的业务逻辑和技术考量。一个完整的评论系统需要支持:内容评论、回复评论、评论点赞、评论排序、敏感词过滤等功能。 …

计算机视觉入门:OpenCV与YOLO目标检测

计算机视觉入门:OpenCV与YOLO目标检测 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 计算机视觉入门:OpenCV与YOLO目标检测摘要引言技术原理对比1. OpenCV:传统图像处理与机器学…

C语言进阶--自定义类型详解(结构体、枚举、联合)

1.结构体 1.1结构体的声明 1.1.1结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.1.2结构的声明 struct tag {member-list; }variable-list;struct Stu {//学生的属性char name[20];int age; };struct Stu {…