2017-03-25 18 views
2

下面是代碼在一個簡單的Java代碼片段:內存管理對於Java中的非實例化類是如何工作的?

class Box { 
    int width; 
    int height; 
    int depth; 
} 

Box catBox = new Box(); 

當執行構造Box(),我們得到了Box類的一個實例。問題是 - 在實例化之前,如果編譯器在代碼中遇到此類時該如何表現自己?我的意思是,這部分:

class Box { 
    int width; 
    int height; 
    int depth; 
} 

這是怎麼類在內存中表示爲對象?編譯器在定義這樣一個類的步驟中在內存中創建關於這個類的任何元信息?

+3

[JVM規格](https://docs.oracle.com/javase/specs/jvms/se8/html/)可能會讓您感興趣。 – user2357112

回答

3

Java類(元數據)將被保存在裏面燙髮根內存空間(在Java8,這是元空間),其中包含類的名稱,方法等。

Java類的元數據結構通常表示爲klass,您可以查看其中的here瞭解更多詳細信息。

0

是Java類也作爲對象存儲在分配給JVM的perm-gen空間中。每個班級都會有一個參考,它會照顧到這些方法。 如果你已經觀察到許多人建議使用獨立的靜態方法,這個方法實際上只能在這個perm-gen空間中加載一次,並且也減少了內存使用量。 如果我們在一個類下使用相同的方法而不是靜態的(儘管可以使它成爲靜態的),我們最終會在內存中擁有兩個引用,它們與java類特有的功能相同。