概述

Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。

我们不能实例化一个Runtime对象,应用程序也不能创建自己的 Runtime 类实例,但可以通过 getRuntime 方法获取当前Runtime运行时对象的引用。一旦得到了一个当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制Java虚拟机的状态和行为

当Applet和其他不被信任的代码调用任何Runtime方法时,常常会引起SecurityException异常。

API方法示例

我们先来看看几个native方法:

public native int availableProcessors();
public native long freeMemory();
public native long totalMemory();
public native long maxMemory();

使用示例如下:

Runtime rt = Runtime.getRuntime();
System.out.println("处理器数量:" + rt.availableProcessors()); //处理器数量:4
System.out.println("空闲内存数:" + rt.freeMemory() / 1024 / 1024 + "mb"); //空闲内存数:111mb
System.out.println("总内存数:" + rt.totalMemory() / 1024 / 1024 + "mb"); //总内存数:120mb
System.out.println("可用最大内存数:" + rt.maxMemory() / 1024 / 1024 + "mb"); //可用最大内存数:1910mb

使用场景:
通过totalMemory()和freeMemory()方法可以知道对象的堆内存有多大,还剩多少。

Java会周期性的回收垃圾对象(未使用的对象),以便释放内存空间。但是如果想先于收集器的下一次指定周期来收集废弃的对象,可以通过调用gc()方法来根据需要运行无用单元收集器。一个很好的试验方法是先调用gc()方法,然后调用freeMemory()方法来查看基本的内存使用情况,接着执行代码,然后再次调用freeMemory()方法看看分配了多少内存。

  • version()方法 (since Java9)
    java9t提供了Version方法,可以放我们和方便的获取到运行时的一些参数信息,可以说是非常的人性化。我们看看这个方法源码:
public static Version version() {if (version == null) {version = new Version(VersionProps.versionNumbers(),VersionProps.pre(), VersionProps.build(),VersionProps.optional());}return version;
}

我们发现所有的参数都来自于VersionProps,所以我们贴一些它的源码,大家就都清晰了

class VersionProps {private static final String launcher_name = "java";private static final String java_version = "10.0.2";private static final String java_version_date = "2018-07-17";private static final String java_runtime_name = "Java(TM) SE Runtime Environment";private static final String java_runtime_version = "10.0.2+13";private static final String VERSION_NUMBER = "10.0.2";private static final String VERSION_BUILD = "13";private static final String VERSION_PRE = "";private static final String VERSION_OPT = "";private static final boolean isLTS = "".startsWith("LTS");private static final String VENDOR_VERSION_STRING = "18.3";private static final String vendor_version = (VENDOR_VERSION_STRING.length() > 0? " " + VENDOR_VERSION_STRING : "");static {init();}
}

由于我的JDK版本是Java10,所以各位的参数可能和我的不太一样。我运行一下如下:

System.out.println(Runtime.version()); //10.0.2+13

执行其它程序

在安全的环境中,可以在多任务操作系统中使用Java去执行其他特别大的进程(也就是程序)。ecec()方法有几种形式命名想要运行的程序和它的输入参数。ecec()方法返回一个Process对象,可以使用这个对象控制Java程序与新运行的进程进行交互。ecec()方法本质是依赖于环境。

 public static void main(String[] args) throws IOException {Runtime rt = Runtime.getRuntime();//rt.exec("notepad.exe"); //打开记事本 备注:.exe可以省略 下同Process process = rt.exec("calc.exe");//打开计算器System.out.println(process); //Process[pid=8108, exitValue="not exited"]}

在新程序开始运行后就可以使用Process的方法了。可以用destory()方法杀死子进程,也可以使用waitFor()方法等待程序直到子程序结束,exitValue()方法返回子进程结束时返回的值。如果没有错误,将返回0,否则返回非0。

public static void main(String[] args) throws IOException, InterruptedException {Runtime rt = Runtime.getRuntime();Process process = rt.exec("notepad.exe"); //打开记事本 备注:.exe可以省略 下同//Process process = rt.exec("calc.exe");//打开计算器process.waitFor(); //阻塞  等到子进程执行结束System.out.println("字进行执行完事了~~~");process.destroyForcibly(); //强制杀死子进程 destroy}运行结果:(当关闭记事本后,会接着运行程序,打印信息)

和Gc相关的方法

  • exit(int status)

    • 通过启动虚拟机的关闭序列,终止当前正在运行的 Java 虚拟机。
  • gc()
    • 运行垃圾回收器。
  • halt(int status)
    • 强行终止目前正在运行的 Java 虚拟机。

load和loadLibrary

这两个方法是我们在使用Java的JNI机制时,会用到的一个非常重要的函数,它的作用即是把实现了我们在Java code中声明的native方法的那个libraryload进来,或者load其他什么动态连接库

这儿JNI编程才会用到。小弟不才,这里只能先给一个大写的略字了

聊聊Java中的Runtime类相关推荐

  1. Java中的Runtime类详解

    Java中的Runtime类详解 1.类注释 /**Every Java application has a single instance of class Runtime that allows ...

  2. Java中的系统类–属性,System.out.println()

    System class in java is one of the core classes and I have never seen any java developer who doesn't ...

  3. JAVA基础(12.Java中的常用类String)

    目录 1.前言 2.日期(时间)相关类 2.1 日期类的应用场景 2.1.1Java中的日期相关的几个类 3. Java中的常用类学习方式 3.1 什么是常用类?为什么要学习? 3.2 怎么使用Jav ...

  4. Java中的BigDecimal类你了解多少?

    点击上方"IT牧场",选择"设为星标"技术干货每日送达! 来源:https://urlify.cn/naiEva 前言 我们都知道浮点型变量在进行计算的时候会出 ...

  5. Java中的String类占用多大的内存

    写在前面 对于Java中的String类占用多大的内存空间这个问题,是最近面试中问的比较多的一个问题.很多小伙伴的回答的都不是很正确,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有 ...

  6. 聊聊Java中的泛型

    聊聊Java中的泛型 文章目录 聊聊Java中的泛型 参考资料 一.概述 1. 泛型的定义 1.1 定义 1.2 常见形式 2. 为什么需要泛型 3. 泛型的优点 4. 泛型的使用 4.1 泛型类 4 ...

  7. java 中常用的类

    java 中常用的类 Math Math 类,包含用于执行基本数学运算的方法 常用API 取整 l  static double abs(double  a) 获取double 的绝对值 l  sta ...

  8. Java中的BigDecimal类你真的了解吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:HikariCP www.jianshu.com/p/c81 ...

  9. Java中常用的类及其特点

    Java中的内部类有四种(内部类作用1.封装装类型. 2.直接访问外部类成员. 3.回调.)内部类,方便他们的外部类调用,一般不会被其它类使用,比如事件监听器之类的,外部类刚好继承了一个别的类,如果你 ...

最新文章

  1. 轻松一下,看看vs.net2002变态的智能提示,不知道算不算bug
  2. 点云关键算法详解及实战剖析正式开讲!(涉及分割、配准、关键点、识别、重建等)...
  3. 定档12月22日!《黑客帝国4》王者归来,再掀矩阵革命
  4. LVS+Keepalived-DR模式负载均衡高可用集群
  5. Activity创建
  6. win7分区c盘调整容量_如何扩大C盘空间 增加C盘容量方法有哪些【详细介绍】
  7. 梯度下降与delta法则
  8. (非原)如何让.net开发的Winform程序快速释放内存
  9. C#的COM接口定义细则
  10. final、static、finally总结
  11. Using SharePoint 2003 Web Services to Retrieve Data From A List
  12. ELK logstash基本配置
  13. 分享两个软件,listary和Snipaste,以及Listary的配置文件
  14. TCL嵌入式测试技术在Comware V7系统中的应用
  15. linux dns配置服务器报告,Linux DNS服务实验报告
  16. html thead隐藏,HTML的thead标签
  17. 知识图谱导论----相关笔记
  18. C/C++动态开辟数组【C++:new/delete(推荐):int *arr = new int[m];】【C++:vector】【C:malloc() free()】
  19. Python 实现动态解析阿里云DNS记录
  20. android 中篇 文章推荐

热门文章

  1. merge java方法_Java HashMap merge() 方法
  2. 图解 负载均衡算法及分类
  3. 漫谈 Java 平台上的反应式编程
  4. Linux expect用法
  5. 我工作三年了,该懂并发了!
  6. 【Unity3D】Transform组件
  7. R学习之统计实验(一)--电梯问题(R语言编程)-----数模
  8. 造梦者,考研人,都会好的!【励志】
  9. string find函数
  10. WEXITSTATUS与WIFEXITED