类库(Runtime类,System类)

Runtime类(理解)

在每一个JVM进程之中都有存在有一个Runtime类的实例化对象,此类对象将由JVM为用户提供好。但是为了保持只有一个Runtime类的实例化对象,所以Runtime类所采用的是一个单例设计模式,构造方法被私有化。
既然此处是单例设计模式,那么一定会存在有一个static方法可以取得本类的实例化对象
取得Runtime类对象:public static Runtime getRuntime();
当取得了Runtime类对象之后就可以通过如下的三个方法取得一些内存信息:
最大可用内存:public long maxMemory()
可用内存量:public long totalMemory()
空闲内存量:public long ferrMemory()
清理垃圾空间:public void gc();
范例:观察内存信息:
package classku;
public class Runtime {
public static void main(String[] args) {
// TODO Auto-generated method stub
Runtime run=Runtime.getRuntime();
System.out.println("1.MAX="+run.maxMemory());
System.out.println("1.TOTAL="+run.totalMemory());
System.out.println("1.FREE="+run.ferrMemory());
String str=" ";
for(int x=0;x<30000;x++) {
str+=x;
}
System.out.println("2.MAX="+run.maxMemory());
System.out.println("2.TOTAL="+run.totalMemory());
System.out.println("2.FREE="+run.ferrMemory());
run.gc();
System.out.println("3.MAX="+run.maxMemory());
System.out.println("3.TOTAL="+run.totalMemory());
System.out.println("3.FREE="+run.ferrMemory());
}
}
什么是gc?如何操作?
GC是垃圾收集器,是负责进行垃圾空间清理的线程
在java之中可以由JVM自动调用GC,或者是由用户调用Runtime类中的gc()方法手工清理垃圾。


System类(理解)

对于System类应该很熟悉,至少接触过两种:输出和数组排序,之前的数组排序并标准
定义:public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
在System类里面有一个方法是取得当前的日期时间的: public static long currentTimeMillis().此时取得是数据是数值,并不是意义的年,月,日
范例:观察currentTimeMillis()方法
public class Runtime {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stubT
System.out.println(System.currentTimeMillis());
Thread.sleep(3000);
System.out.println(System.currentTimeMillis());
}
}
范例:统计时间
public class Runtime {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stubT
long start=System.currentTimeMillis();
String str=" ";
for(int x=0;x<30000;x++) {
str+=x;
}
long end=System.currentTimeMillis();
System.out.println("本操作花费的时间:"+(end-start));
}
}


在System类存在如下方法:public static void gc();但是此操作并不是新的操作,通过System类调用gc()就等价于调用了Runtime类的gc()
方法,这两个gc()没有任何的区别。

思考?所谓的垃圾指的是没有任何的占内存所指向堆内存空间,但是在堆内存变为垃圾之前,一定会经历创建,使用的两个过程,最终的过程才成为垃圾,。

那么现在的疑问:一个对象产生的时候发现可以通过构造方法做一些对象产生的处理,但是一旦对象没用了,连个说最后一句说的机会都没有。

那么如果希望在对象回收前可以进行一些处理操作,则可以重写Object类之中的finalize()方法:
方法:protected void finalize() throws Throwable;
虽然此时抛出了异常信息,但是不管抛出什么样的信息,最终都不会影响程序
package classku;
class Per{
public Per() {
System.out.println("小红出生了");
}
@Override
protected void finalize() throws Throwable{
System.out.println("小红得罪老师,结果自杀了");
throw new Exception("老子死得爽");
}
}
public class A {
public static void main(String[] args) {
// TODO Auto-generated method stub
Per per=new Per();
per=null;
System.gc();
}
}
面试题:请解释final,finally,finalize的区别?
final:关键字,可以定义不能被继承的父类,定义不能被重写的方法,常量;
finally:关键字,异常处理的统一出口,不管是否有异常都要指向;
finalize:方法protected void finalize() throws Throwable,Object类之中的方法,当对象被清理前执行的收尾操作;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值