在每一个JVM进程之中,都会存在一个运行时的操作类的对象,而这对象所属的类型就是Runtime类。打开这个类的文档可以发现,在这个类之中并没有构造方法定义,可是按照之前所学,每个类至少有一个构造方法,而这个类的构造方法实际上存在只是不被外部看见而已,因为构造方法被私有化了,这是一个标准的单例设计模式。既然是单例设计模式则在这个类就一定会存在一个static型的方法,可以取得本类的实例化对象:public static Runtime getRuntime()。 而当取得了这个类的实例化对象之后,可以利用这个类取得一些JVM的信息,
· 取得最大可用内存:public long maxMemory(); · 总共可以使用的内存:public long totalMemory(); · 空闲的内存:public long freeMemory()。
发现取得内存信息的时候所有的数据返回的类型是long,在之前讲解基本数据类型的时候强调long型数据的使用就在两种情况:表示文件大小、表示日期时间。 在Runtime类有一个非常重要的方法:public void gc(),运行垃圾收集器,释放垃圾空间。
代码语言:javascript复制public class TestDemo {
public static void main(String[] args) throws Exception {
Runtime run = Runtime.getRuntime() ; // 取得对象
System.out.println("1.MAX_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.MAX_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.MAX_MEMORY:" run.maxMemory());
System.out.println("3.TOTAL_MEMORY:" run.totalMemory());
System.out.println("3.FREE_MEMORY:" run.freeMemory());
}
}
面试题:请解释一下什么叫gc()?Java是如何处理的?
GC(Garbage Collector):垃圾收集器,可以释放掉垃圾空间所占用的内存。在java之中GC有两种方式处理:一种是由JVM不定期的执行GC操作,另外一种是由用户自己手工调用Runtime类的gc()方法进行垃圾空间的释放。