Runtime
描述运行时的状态,也就是说在整个的JVM之中,Runtime类是唯一一个与JVM状态有关的类,并且都会默认提供有一个默认的该类的实例化对象。
-
单例模式实现,Runtime.getRuntime()
-
保存的是JVM维护的系统信息
Runtime runtime = Runtime.getRuntime(); System.out.println("可用进程数:" + runtime.availableProcessors()); System.out.println("最大内存:" + runtime.maxMemory()/1024/1024 + "M"); System.out.println("总内存:" + runtime.totalMemory()/1024/1024+ "M"); System.out.println("可用的内存:" + runtime.freeMemory()/1024/1024+ "M"); runtime.gc();
System类
- 数组拷贝:public static void arraycopy()
- 获取当前时间数组:System.currentTimeMillis()
- 进行垃圾回收:System.gc() ,就是调用的Runtime.gc()
cleaner
-
1.9之后提供了
,java.lang.ref.Cleaner,
当类被回收的时候,会调用的此方法,你可以在类中干点什么事情,比如喊一句“我要死了”、主要的功能是进行替代finialize()方法 -
finialize()方法
,1.9之前调用方式class Member{ public Member(){ System.out.println("构造方法,诞生类"); } @Override protected void finalize() throws Throwable { System.out.println("回收方法"); throw new Exception("我还要再活500年"); } } public class test { public static void main(String[] args) throws InterruptedException { Member member = new Member(); member = null; Runtime.getRuntime().gc(); } }
-
cleaner()方式
,虽然比finialize麻烦了,但是效率更高了CleaningExample implements AutoCloseable
CleaningExample 是继承于AutoCloseable- 新的监听对象回收的方法,在需要在一个新的线程中执行,效率更高
- 步骤如下:
- 被监听的类需要实现Runnable接口
- 创建一个Cleaning,将类注册到里面去
- 主线程中需要初始化 Cleaning类
class Member implements Runnable{
public Member(){
System.out.println("构造方法,诞生类");
}
@Override
public void run() {
System.out.println("清除方法");
}
}
class MemberCleaning implements AutoCloseable{
private static final Cleaner cleaner = Cleaner.create();
private Member member;
private Cleaner.Cleanable cleanable;
public MemberCleaning(Member member){
this.member = member; //创建新对象
this.cleanable = this.cleaner.register(this, this.member);
}
@Override
public void close() throws Exception {
this.cleanable.clean();//启动线程
}
}
public class test {
public static void main(String[] args) throws InterruptedException {
Member member = new Member();
try(MemberCleaning mc = new MemberCleaning(member)){
}catch (Exception e){}
}
}
clone克隆
- Object中的方法,所以,所有的类都可以被克隆,但是该类必须实现Cloneable接口
class Member implements Cloneable{
private String name;
private int age;
public Member(String name, int age) {
this.name = name;
this.age = age;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Member{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class test {
public static void main(String[] args) throws InterruptedException, CloneNotSupportedException {
Member memberA = new Member("zhangsan",18);
Member memberB = (Member) memberA.clone();
System.out.println(memberA);
System.out.println(memberB);
}
}