Effective Javaを読んでいる⑥

GCあるからってメモリについて考える必要がないわけじゃないんだよみたいな話

意図せず参照が残ってるオブジェクトがGCされないで残る→そいつらが参照してるオブジェクトが残る→やばい

もう意図的には参照しないけどどっかの変数が参照してる場合は変数にnullを代入しましょうみたいな

WeakHashMapについて

WeakHashMap (Java Platform SE 6)
キーへの参照が無くなるとその値が消滅するマップ?
GCでそのキーが捨てられて初めて値が消滅する?
なんかの方法でマップを作る→CSVファイルとかからキーを拾ってくる→拾ってきたキーでマップに検索をかける、みたいなくだりでは使えないってイメージであってるんだろうか
キャッシュで使うとかなんとか
メモリ圧迫しないとGC走らない→メモリ圧迫するまではキーを保持できる→キャッシュに使えるじゃん
みたいな?
この書き方ルナ先生っぽい

弱参照って?

参考:弱参照ってなんなのさ。 - 亀岡的プログラマ日記
参考(弱参照のインスタンス?の実例):Java - 弱い参照とな - Qiita

参照が残ってるのにGCの対象になってしまう参照のこと、WeakHashMapのキーは参照が残ってても(強参照されてないと)GCの対象になる

public class Kani {
	public void choki(){
		System.out.println("ちょきちょき");
	}
}
import java.lang.ref.WeakReference;

public class Test3 {
	
	public static void main(String[] args){
		Kani kani = new Kani();
		WeakReference<Kani> ref = new WeakReference<Kani>(kani);
		System.gc();

		kani.choki();
		//強参照が残ってるのでGCされない
		((Kani) ref.get()).choki();
		
		kani = null;
		System.gc();

		//ここでぬるぽ
		((Kani) ref.get()).choki();
	}
}

リスナーの意味がいまいちわかんないけどググってもGUIがらみのやつばっかでてくる
Javascriptのイベントに関数を登録してうんぬんみたいのと同じイメージのような感じだけどよくわかんねえ