JAVA(Android)のメモリ管理

@akisutesama さんのJAVAのメモリ管理を理解する行程が非常にいいと感じたので、残しておきます。
20
akisute/Masashi Ono @akisutesama

あれ?全く参考にならなくね?

2011-09-18 16:37:01
akisute/Masashi Ono @akisutesama

"また、Reference オブジェクトそのものは回収されないことにも注意したい。これは WeakReference も SoftReference も同じだけども。" っておいまて

2011-09-18 16:43:17
kishikawa katsumi @k_katsumi

@akisutesama そりゃReference自体は普通に強参照だから辿れる限りは。

2011-09-18 16:44:51
akisute/Masashi Ono @akisutesama

さっき上げたページのSoftReferenceの例で、もしGCされちゃった後に他からどっかlistの要素に対してアクセスがあった場合ってどうなるんだろ・・・って思ったら書いてあった。nullだ。 http://t.co/Wp1QaRWc

2011-09-18 16:48:01
akisute/Masashi Ono @akisutesama

@k_katsumi キャッシュのためにWeakHashMapってのがあるみたいなんで、それでもういいと思います。俺も多分使いませんし気にすることはなさそうです。単に今見てるのは主に勉強のためかな

2011-09-18 16:48:52
akisute/Masashi Ono @akisutesama

SoftだとGCされてWeakだとGCされない理由はこれだろうな。でもWeakでなんでSweepされないんだろ。もう参照ないじゃん。うーむ。

2011-09-18 16:50:17
akisute/Masashi Ono @akisutesama

とりあえずさっきのページは保存。マジ良くまとまってて素晴らしい。

2011-09-18 16:51:23
akisute/Masashi Ono @akisutesama

http://t.co/I4dsvIiE これ詳しいな。Softは完全にGCが勝手に判断するのか!すげー!Weakは理屈の上で参照が尽きたら消えると。

2011-09-18 16:53:28
akisute/Masashi Ono @akisutesama

http://t.co/I4dsvIiE これ死ぬほど分かりやすい!すげぇ!PhantomってのはいわゆるNSZombieみたいな奴なんだな。

2011-09-18 16:55:15
akisute/Masashi Ono @akisutesama

後知りたいことは一対多・多対多の通知の仕方と、内部クラスのインスタンスが親クラスのインスタンスに対してどういう風に参照持ってるんだってのを知りたい。

2011-09-18 16:58:11
akisute/Masashi Ono @akisutesama

ってさっきのブログ小野和俊(lalha)さんじゃないか。もうこの記事だけであの人がどれぐらいヤバイわかってる人か良く理解できた

2011-09-18 16:59:12
akisute/Masashi Ono @akisutesama

ブログでもTwitterでも技術話全然しないんだもんあの人。ブラ三とミスコンの人と思ってるぐらいだが、たまに技術記事を書いたらこれか

2011-09-18 17:00:00
akisute/Masashi Ono @akisutesama

ああ、そうか、参照を持ってるんじゃない、「インスタンスを共有している」んだ。なるほど。

2011-09-18 17:05:10
akisute/Masashi Ono @akisutesama

要するに内部クラスのあるアウタークラスは内部クラス分のデータももてるインスタンスなわけだ。なるほどね。

2011-09-18 17:05:33
akisute/Masashi Ono @akisutesama

すっきりさっぱり理解できた。そうかーなるほど。これ頭いい仕組みだな—。「インスタンスを共有」か。中身は同じものなんだな。へーすげー

2011-09-18 17:06:25
akisute/Masashi Ono @akisutesama

これで内部クラスの仕組みについてはOK。あとは簡単だ。

2011-09-18 17:06:48
akisute/Masashi Ono @akisutesama

ん、まて、匿名クラスの場合はどうなるんだ?外側を参照できるぞ?これはさっきのインスタンスを共有しているという考えではうまくいかなくないか?

2011-09-18 17:09:50
akisute/Masashi Ono @akisutesama

問題が解決しなくなった>< もうちょっと勉強する

2011-09-18 17:11:05
akisute/Masashi Ono @akisutesama

http://t.co/RzdO4RRv 答えが書いてあった。匿名クラスは局所クラスの一種。局所クラスは内部クラスの一種。内部クラスは外部のクラスとインスタンスを共有する。なるほど。

2011-09-18 17:14:29
akisute/Masashi Ono @akisutesama

したがって匿名クラスも大本の親とインスタンスを共有しているから、その中身に触れることができる。OK。問題なくなった。

2011-09-18 17:14:58
akisute/Masashi Ono @akisutesama

Android的に言おう。あるActivityにWebViewがあり、WebClientを作りたい。ここでWebClientを匿名クラスで実装しようがActivityの内部クラスで実装しようが、結果としてはActivity自身のインスタンスをWebClientに渡してると。

2011-09-18 17:16:21
akisute/Masashi Ono @akisutesama

AndroidのActivity, Application, Viewがどのような参照になっているかを記述してある書物とかある?

2011-09-18 17:25:59