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);
}
}