Java中Runtime类详细总结
文章目录
- Runtime类简介
- API列表
- 经典案例
- exec
- 获取信息
- 注册钩子线程
- 取消注册钩子线程
- 终止!
- 参考阅读
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
@Testpublic 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();}}}
获取信息
@Testpublic 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
注册钩子线程
@Testpublic 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方法结束,打印信息。
取消注册钩子线程
@Testpublic 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");}
终止!
@Testpublic void testExit(){Runtime.getRuntime().exit(0);//下面这段 无事发生System.out.println("Program Running Check");}
参考阅读
- https://www.javatpoint.com/java-runtime-class
- https://www.geeksforgeeks.org/java-lang-runtime-class-in-java/
Java中Runtime类详细总结相关推荐
- java runtime是什么_java中Runtime类详细介绍
Runtime类描述了虚拟机一些信息.该类采用了单例设计模式,可以通过静态方法 getRuntime()获取Runtime类实例.下面演示了获取虚拟机的内存信息: package Main; publ ...
- java的runtime类,java中Runtime类的简单应用
1.简介 JVM中,Runtime类是唯一与JVM的运行状态相关的类,并且默认情况下提供此类的实例化对象. 由于每个JVM进程中只允许运行时类的一个对象,因此默认情况下该类的构造方法是私有化的,这表明 ...
- java中的类和对象(重点)超详细
java中的类和对象 1.类与对象的初步认知 2.类和对象的实例化 3.类的成员 3.1.字段,属性,成员变量 3.2.方法 3.3.static 关键字 3.4.小结 4.封装 4.1.privat ...
- 深入研究java.lang.Runtime类【转】
转自:http://blog.csdn.net/lastsweetop/article/details/3961911 目录(?)[-] javalang 类 Runtime getRuntime e ...
- 浅析Java.lang.Runtime类
一.概述 Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接. 一般不能实例化一个Runtime对象 ...
- java程序中出现两个class,Java中Class类中两个值得注意的进行类型动态转换的方法...
Java中的Class类有两个重要的方法:cast()和asSubclass().这两个方法都是用于Class类进行运行时(run-time)阶段的类型转换的.下面来看看他们的定义和使用: 第一个方法 ...
- 深入研究java.lang.Runtime类,Process类
2019独角兽企业重金招聘Python工程师标准>>> 一.概述 Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行 ...
- Java 中 Pair 类的五种替代方案
Pair 是一个容器,用于存储两个对象的元组.Java 并没有真正提供 Pair 类的任何实现.这篇文章将讨论 Java 中 Pair 类的各种替代方案. Pair 通常用于一起跟踪两个对象.它包含两 ...
- 面向对象系列教材 (一)- Java中的类和对象
面向对象系列教材 (一)- Java中的类和对象 本章节会引入面向对象的基本概念 (但是不会深入展开,仅仅是引入. 深入的学习会在后续的类和对象以及接口与继承 中展开) 相信你肯定玩过DOTA或者LO ...
最新文章
- Linux下测试的c++的使用
- wordpress中文乱码处理方法
- C# 数组 二维数组
- 最短路径:Dijkstra算法和Floyd算法
- WatchOS系统开发大全(1)-AppleWatch背景介绍
- get_metrology_object_result_contour查询计量对象的结果轮廓
- 工作73:获取id值
- 【bzoj1222】[HNOI2001]产品加工 背包dp
- 导入项目报错报错Error:java: Cannot run program “D:/jdk/jdk1.7.0_67/bin/java“
- 总结Django一些开发经验
- 开源数据屏蔽 数据加密_数据屏蔽或更改行为信息
- Programmer,Developer,Engineer——软件从业人员的职业规划
- 计算机网络第8版课后习题答案整理
- Python -- 网络编程 -- 抓取网页图片 -- 豆瓣妹子
- 23个平台短视频去水印解析下载接口
- 扫雷win10_利用Python实现自动扫雷小脚本
- 潦草字体在线识别_遇到好看的字体?不会识别?教你如何快速识别字体
- 使用计算机VLOOKUP函数需注意什么,lookup和vlookup的区别 计算机Excel中的lo...
- 单龙芯3A3000-7A1000PMON研究学习-(2)搭建交叉编译环境
- Mqtt精髓系列之精简之道