Runtime获取系统资源信息类

Runtime类描述的是运行时的状态,也就是说在整个JVM之中,Runtime类是唯一一个与JVM运行状态有关的类,并且都会默认提供一个该类的实例化对象。
由于在每一个JVM进程里面只允许提供一个Runtime类的对象,所以这个类的构造方法被默认私有化了,并且该类使用的是单例设计模式,并且单例设计模式一定会提供一个static方法获取本类实例。
操作系统直接对CPU、进程、内存进行管理,程序执行过程中JVM通过操作系统提供的函数可以对cpu、进程、内存信息进行获取,JVM将资源信息通过Runtime类进行保存,在开发过程中要想获取系统的资源情况,必须通过Runtime类来获取,这时候也就必须保证Runtime的唯一。
在这里插入图片描述

由于Runtime类属于单例设计模式,如果要想获取实例化对象,那么就可以依靠类中的getRuntime()方法完成

  • 获取实例化对象:public static Runtime getRuntime();
    通过Runtime类中的availableProcessors()方法可以获取本机的CPU的内核数:public native int availableProcessors();
    **范例:**获取Runtime类对象
public static void main(String[] args) {
     Runtime run = Runtime.getRuntime();
        System.out.println(run.availableProcessors());
    }

但是除以上的方法之外,在Runtime类里面还提供了有以下四个重要的操作方法:

  • 获取最大可用内存空间:public long maxMemory();默认的配置为本机系统内存的四分之一
  • 获取可用内存空间:public long totalMemory();默认的配置为本机系统六十四分之一
  • 获取空闲内存空间:public long freeMemory()
  • 手工进行GC处理:public void gc();
    **范例:**观察内存状态
public class JavaApi {
    public static void main(String[] args) {
     Runtime run = Runtime.getRuntime();
        System.out.println(run.availableProcessors());
        System.out.println("【1】MEX_MEMORY:"+ run.maxMemory());
        System.out.println("【1】TOTAL_MEMORY:" + run.totalMemory());
        System.out.println("【1】FREE_MEMORY:" + run.freeMemory());
        String str = "";
        for(int x = 0; x < 30000; x ++){
            str +=x;
        }
        System.out.println("【2】MEX_MEMORY:"+ run.maxMemory());
        System.out.println("【2】TOTAL_MEMORY:" + run.totalMemory());
        System.out.println("【2】FREE_MEMORY:" + run.freeMemory());
        run.gc();
        System.out.println("【3】MEX_MEMORY:"+ run.maxMemory());
        System.out.println("【3】TOTAL_MEMORY:" + run.totalMemory());
        System.out.println("【3】FREE_MEMORY:" + run.freeMemory());
    }
}

面试题:请问什么是GC?如何处理?

  • GC(Gargabe Collector)垃圾收集器,是可以由系统自动调用的垃圾释放功能,或者使用Runtime类中gc()方法进行调用。

猜你喜欢

转载自blog.csdn.net/taojin12/article/details/85787609