Java中的Runtime类

来源:互联网 发布:淘宝上抓卖保健品的 编辑:程序博客网 时间:2024/04/30 01:41

了解Runtime类

在每一个Java 进程之中都会存在一个Runtime类对象,由于此类的对象是由Java进程自己维护的,所以在整个Runtime类设计的过程中,只为用户提供唯一的一个实例化对象,所以这个类所使用的就是单例设计模式,构造方法被私有化了。(如果是单例设计模式,构造方法被私有化,其内部也会有一个方法能够取得当前的实例对象),所以其类的内部一定会提供一个static方法取得本类的实例化对象。

例如:取得我们Runtime类对象: public static Runtime getRuntime()
那么获取对象之后我们可以做什么呢? 在Runtime类中定义有如下可以去的内存大小的方法:
- 空闲内存大小: public long freelMemory()
- 总共可用内存大小:public long totalMemory()
- 最大可用内存大小:public long maxMemory()


范例:取得内存大小

package dev;
public class test1 {
public static void main(String[] args) {
Runtime n=Runtime.getRuntime();
System.out.println(n.freeMemory());
System.out.println(n.maxMemory());
System.out.println(n.totalMemory());
}
}

输出结果:(这些都是字节,真正的resule=resule/1024/1024)
FREE = 15528232 (15M)
MAX = 259522560 (248M)
TOTAL = 16252928 (16M)

面试题:Java如何调整可用内存的大小?
扩展:JVM内存划分图

这里写图片描述

Java中内存划分主要有两个组成部分:

 堆内存:保存的实例化对象的内容,在每个JVM进程中之中,对象的对内存都会由垃圾收集器自动的管理内存回收问题。 非堆内存:(Eden + Front Space + To Space):主要用于产生新的对象:  |- 所有的方法全局方法区  |- 所有的 static 的全局数据区  |- 永生代:负责存放反射对象的操作空间;

如果我们要调整我们的内存大小,只能调我们的堆内存空间,他的调整有如下三个参数:

"-Xms" : 初始分配大小,为物理内存的1/64,最多不超过1G;"-Xmx" : 最大分配内存,为物理内存的1/4;"-Xmm" : 年轻代内存大小;

在Runtime 类中提供有垃圾的收集机制:public void gc()
问题:那么垃圾处理经历了哪些问题呢?

这里写图片描述

简单的说:

1、新的对象保存在Eden 区中,之后的此对象保存在年轻代区;而后在进行GC之后所有被保存下来的年轻代中的对象(从GC,MinorGC),将保存在旧生带(主GC,MajorGC)。2、如果再有新的对象,从年轻代回收,再找旧生代,最后都没空间,进行垃圾的全部所描(Full GC)。

面试题:请问什么是GC 如何操作?

GC 指的是垃圾收集,对于GC操作可以利用Runtime类中的gc()方法手工释放,或者是利用系统自动进行释放来进行垃圾回收处理;

总结:

1、Runtime 使用了单例设计模式,每一个JVM进程只会存在有一个Runtime类对象。
2、Runtime 类提供有gc()方法,可以进行垃圾收集处理。

原创粉丝点击