美文网首页
Runtime类

Runtime类

作者: 秋笙fine | 来源:发表于2019-01-26 15:34 被阅读0次

    1.Runtime类的主要作用

    在每一个JVM进程里面都会存在有一个Runtime类的对象,这个类的主要功能是取得一些与运行时有关的环境属性,或者创建新的进程。
    在Runtime类定义的时候,它的构造方法已经被私有化了(单例设计模式的应用),以此保证,在整个运行过程中,只有唯一一个Runtime类的对象。所以在Runtime类里面提供有一个static方法,取得Runtime类实例对象

    public static Runtime getRuntime();
    

    2.Runtime类的定义形式

    Runtime类中有以下方法:
    public long totalMemory();//返回所有可用内存空间
    public long maxMemory();//返回最大可用内存空间
    public long freeMemory();//返回空余内存空间

    范例:观察内存大小:

    public class TestDemo{
        
        public static void main(String[] args){
            Runtime runtime=Runtime.getRuntime();
            System.out.println("MAX="+runtime.maxMemory());
            System.out.println("Total="+runtime.totalMemory());
            System.out.println("FREE="+runtime.freeMemory());
        }   
    }
    
    image.png

    如果一旦产生了过多垃圾,那么就会改变可用的内存空间大小,为此Runtime类里面提供了:public void gc();手动实现JVM的gc机制。

    package TestDemo;
    
    
    public class TestDemo{
        
        public static void main(String[] args){
            Runtime runtime=Runtime.getRuntime();
            System.out.println("MAX="+runtime.maxMemory());
            System.out.println("Total="+runtime.totalMemory());
            System.out.println("FREE="+runtime.freeMemory());
            String str="";
            for (int i = 0; i < 9000; i++) {
                str+=i;
            }
            System.out.println("MAX="+runtime.maxMemory());
            System.out.println("Total="+runtime.totalMemory());
            System.out.println("FREE="+runtime.freeMemory());
            runtime.gc();
            System.out.println("MAX="+runtime.maxMemory());
            System.out.println("Total="+runtime.totalMemory());
            System.out.println("FREE="+runtime.freeMemory());
        }   
    }
    
    
    
    image.png

    面试题:请解释什么叫GC?如何处理?
    GC(Garbage Collection) 垃圾收集器,指的是释放无用的内存空间,GC会由JVM不定期自动回收,(FGC,YGC,GC算法)或者调用Runtime的gc()方法。

    Runtime类有一个更有意思的方法, 调用本机的可执行程序并且创建进程

    public Process exec(String command)throws IOException

    package TestDemo;
    
    
    public class TestDemo{
        
        public static void main(String[] args)throws Exception{
            Runtime runtime=Runtime.getRuntime();
            Process pro=runtime.exec("mspaint.exe");//调用本机可执行程序
            Thread.sleep(5000);
            pro.destroy();//销毁进程
        }   
    }
    
    
    

    的确启动了本机的画图程序,5秒后关闭了

    总结

    1.Runtime类使用了单例设计模式,必须通过内部的getRuntime()方法获取实例化对象
    2.Runtime类提供了gc()用于手动GC

    相关文章

      网友评论

          本文标题:Runtime类

          本文链接:https://www.haomeiwen.com/subject/mpeijqtx.html