2017-08-04 11 views
2

以下は、ディスカッション中に私の友人の一人から提起された質問ですが、私たちはどちらも実際の答えが分かりませんでした。私たちは、memory areaは(を含むクラスに関連するすべてのデータを保持していることを知っているオブジェクトはどこにJavaで作成されるのですか

JVMインスタンスが作成され、それがすべての3つのオブジェクトを作成するために移行するオブジェクトコードでは、
public class Test { 
static int i = 5; 
static String str = "Welcome"; 
static Map<String, String> map = new HashMap<>(); 
} 

、それを作成しない

- Inside memory/metadata area 
- Inside heap area 

静的参照)、heap areaはクラスのすべてのインスタンス変数を保持します。

しかし

- int variable is created(We assume that it will be created in method area 
- Not sure about the other two object(String and HashMap) 

上記のクラスのために、我々は何かを誤解し、これらの変数は、Oracle JVMのJava

+0

すべてのオブジェクトは、指定したとおりにヒープ上に作成されます。 –

+0

* 1 mistake *:静的フィールドは、クラスのロード時に初期化されます。 –

答えて

1

に格納されますどのように理解する上で私たちを助けている場合、特別なオブジェクトが存在し、私たちを修正各クラスが静的フィールドを保持するようにします。ヒープ・ダンプを実行すると、この特殊オブジェクトが表示されます。

注:静的メンバーが格納されている場所は指定されていないため、JVMに基づいていても構いません。

関連する問題