文章目录

  • 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类详细总结相关推荐

  1. java runtime是什么_java中Runtime类详细介绍

    Runtime类描述了虚拟机一些信息.该类采用了单例设计模式,可以通过静态方法 getRuntime()获取Runtime类实例.下面演示了获取虚拟机的内存信息: package Main; publ ...

  2. java的runtime类,java中Runtime类的简单应用

    1.简介 JVM中,Runtime类是唯一与JVM的运行状态相关的类,并且默认情况下提供此类的实例化对象. 由于每个JVM进程中只允许运行时类的一个对象,因此默认情况下该类的构造方法是私有化的,这表明 ...

  3. java中的类和对象(重点)超详细

    java中的类和对象 1.类与对象的初步认知 2.类和对象的实例化 3.类的成员 3.1.字段,属性,成员变量 3.2.方法 3.3.static 关键字 3.4.小结 4.封装 4.1.privat ...

  4. 深入研究java.lang.Runtime类【转】

    转自:http://blog.csdn.net/lastsweetop/article/details/3961911 目录(?)[-] javalang 类 Runtime getRuntime e ...

  5. 浅析Java.lang.Runtime类

    一.概述      Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接.       一般不能实例化一个Runtime对象 ...

  6. java程序中出现两个class,Java中Class类中两个值得注意的进行类型动态转换的方法...

    Java中的Class类有两个重要的方法:cast()和asSubclass().这两个方法都是用于Class类进行运行时(run-time)阶段的类型转换的.下面来看看他们的定义和使用: 第一个方法 ...

  7. 深入研究java.lang.Runtime类,Process类

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 Runtime类封装了运行时的环境.每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行 ...

  8. Java 中 Pair 类的五种替代方案

    Pair 是一个容器,用于存储两个对象的元组.Java 并没有真正提供 Pair 类的任何实现.这篇文章将讨论 Java 中 Pair 类的各种替代方案. Pair 通常用于一起跟踪两个对象.它包含两 ...

  9. 面向对象系列教材 (一)- Java中的类和对象

    面向对象系列教材 (一)- Java中的类和对象 本章节会引入面向对象的基本概念 (但是不会深入展开,仅仅是引入. 深入的学习会在后续的类和对象以及接口与继承 中展开) 相信你肯定玩过DOTA或者LO ...

最新文章

  1. Linux下测试的c++的使用
  2. wordpress中文乱码处理方法
  3. C# 数组 二维数组
  4. 最短路径:Dijkstra算法和Floyd算法
  5. WatchOS系统开发大全(1)-AppleWatch背景介绍
  6. get_metrology_object_result_contour查询计量对象的结果轮廓
  7. 工作73:获取id值
  8. 【bzoj1222】[HNOI2001]产品加工 背包dp
  9. 导入项目报错报错Error:java: Cannot run program “D:/jdk/jdk1.7.0_67/bin/java“
  10. 总结Django一些开发经验
  11. 开源数据屏蔽 数据加密_数据屏蔽或更改行为信息
  12. Programmer,Developer,Engineer——软件从业人员的职业规划
  13. 计算机网络第8版课后习题答案整理
  14. Python -- 网络编程 -- 抓取网页图片 -- 豆瓣妹子
  15. 23个平台短视频去水印解析下载接口
  16. 扫雷win10_利用Python实现自动扫雷小脚本
  17. 潦草字体在线识别_遇到好看的字体?不会识别?教你如何快速识别字体
  18. 使用计算机VLOOKUP函数需注意什么,lookup和vlookup的区别 计算机Excel中的lo...
  19. 单龙芯3A3000-7A1000PMON研究学习-(2)搭建交叉编译环境
  20. Mqtt精髓系列之精简之道

热门文章

  1. Jack Dangermond先生的一段话
  2. 2020互联互通社区中秋国庆双节盛典
  3. jsp+ssm计算机毕业设计医学季节性疾病筛查系统【附源码】
  4. Flutter 实战调起三方地图导航(高德、百度、腾讯、苹果)
  5. 一次C10K场景下的线上Dubbo问题排查及优化转
  6. Winograd 方法快速计算卷积
  7. 思科 计算机网络 所有测试答案
  8. AMiner 会议论文推荐第十一期
  9. d16 format on nv card
  10. windows平台下的进程内存修改