java
1 2MyClass m; 3for(int i = 0: i < 10000: i++){ 4 m = new MyClass(); 5} 6 7======================== 8 9 10for(int i = 0: i < 10000: i++){ 11 MyClass m = new MyClass(); 12} 13
上は
スタック領域のアドレス5にmという変数を置いて
ヒープ領域アドレス100に新しいMyClassオブジェクトを置く
スタック領域のアドレス5のmにヒープ領域アドレス100という参照情報を与える
2回目のloop以降は
ヒープ領域アドレス101に新しいMyClassオブジェクトを置く
スタック領域のアドレス5のmにヒープ領域アドレス101という参照情報を与える
っていう感じで
ヒープ領域には10000のMyClassオブジェクトが生成される
スタック領域にはアドレス5のm以外生成されない
下は
スタック領域のアドレス5にmという変数を置いて
ヒープ領域アドレス100に新しいMyClassオブジェクトを置く
スタック領域のアドレス5のmにヒープ領域アドレス100という参照情報を与える
2回目のloop以降は
スタック領域のアドレス6にmという変数を置いて
ヒープ領域アドレス101に新しいMyClassオブジェクトを置く
スタック領域のアドレス6のmにヒープ領域アドレス101という参照情報を与える
っていう感じで
ヒープ領域には10000のMyClassオブジェクトが生成される
スタック領域にはアドレス5-10005の領域が確保されの変数mが入っている
こんな認識であってますか?とちらの書き方がいいとかありますか?
あとどちらの処理にせよ10000のMyClassオブジェクトが生成されるのはメモリーが勿体無い気がするんですが
、こちら疑似コードなのでなんとも言えないですが、どうやって回避するものなのでしょうか?
※アドレスの番地等は仮です
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/03 01:18 編集