=
ホーム
On Your Mark
ホーム
/
設計(Java)
/
【Java】 Effective Java 第二版 お勉強 メモリーリークに注意
2013年10月10日木曜日
Java
基本
設計(Java)
t
f
B!
P
L
# オブジェクトの生成と消滅 ## 今日 読んだところ P 24~26 ## 項目 廃れたオブジェクト参照を取り除く<br /> ## メモリー管理について考える必要ない? Javaは、CやC++と違いガベージコレクションが入るので、<br /> 不要なメモリは自動で削除してくれますが、<br /> ソースの書き方によっては、GC対象外になってしまうこともあり、<br /> Javaだから、メモリ管理は不要と考えないほうが良いです。<br /> ## ポイント ### 廃れた参照 参照が残っていると、たとえ使用していなくてもGCの対象外になります。<br /> 結果参照が残ったオブジェクトが溜まれば、OutOfMemoryErrorが発生する可能性があります。<br /> そうならないよう、廃れた参照を取り除くためにnullを設定すると良いです。<br /> ### キャッシュ 一旦キャッシュに入れてしまうとそこのオブジェクト参照していることを忘れがちになる。<br /> そういう場合、WeakHashMapを使うと良いそうです。<br /> エントリーのキーの参照が廃れたら自動で取り除いてくれるみたいです。<br /> <br /> WeakHashMapは使ったこと無いので、試しにプログラムを書いて実行してみたら、<br /> 下記のような結果になりました。<br /> <pre> Map<String, String> map = new WeakHashMap<String, String>(); map.put("key1", "val1"); String key2 = new String("key2"); String val2 = new String("val2"); map.put(key2, val2); String val3 = "val3"; map.put(new String("key3"), val3); System.out.println("before"); System.out.println("key1: " + map.get("key1")); System.out.println("key2: " + map.get("key2")); System.out.println("key3: " + map.get("key3")); System.gc(); System.out.println("after"); System.out.println("key1: " + map.get("key1")); System.out.println("key2: " + map.get("key2")); System.out.println("key3: " + map.get("key3")); === 実行結果 === before key1: val1 key2: val2 key3: val3 after key1: null key2: val2 key3: null </pre> 参照がなくなると自動で取り除いてくれますが、<br /> 実際、どんなときに使えばいいんでしょうかね。<br /> ### リスナー・コールバック コールバックで明示的に参照を消さない実装を行った場合、<br /> コールバックが蓄積されてしまいます。<br /> ちゃんと消すか、弱い参照を使うかして対応することが望ましい。<br />
Translate
このブログを検索
ブログアーカイブ
►
2020
(38)
6月 2020
(6)
5月 2020
(10)
4月 2020
(10)
3月 2020
(4)
2月 2020
(5)
1月 2020
(3)
►
2019
(4)
1月 2019
(4)
►
2018
(23)
12月 2018
(3)
4月 2018
(11)
3月 2018
(9)
►
2014
(20)
7月 2014
(3)
1月 2014
(17)
▼
2013
(166)
12月 2013
(15)
11月 2013
(22)
10月 2013
(31)
9月 2013
(26)
8月 2013
(32)
7月 2013
(40)
今週の人気の記事
【git】 WindowsでGitを使う (msysgit + TortoiseGit)
【まとめ】GWはおうちでぬりえ 鉄道会社公式の電車ぬりえをまとめた
【MySQL】文字列をバイト数で切り取る
【まとめ】おうちでペーパークラフト 鉄道会社公式のペーパークラフトをまとめた
【Android】 Eclipseでアノテーションのエラーが発生した場合
フォロワー
On Your Mark
QooQ
0 件のコメント:
コメントを投稿