java基礎篇:Runtime、System、cleaner、clone等基礎類

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 AutoCloseableCleaningExample 是繼承於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);

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章