- muga_nishizawa
- 3051
- 0
- 1
- 0
ClassLoader には親子関係があり、親のClassLoaderでロードされたクラスが、フィールドに子のClassLoaderでロードされたクラスのインスタンスを持つことはあり得ない…は合っているかな。
2011-08-20 11:48:03ぃゃ合ってないな。FrameworkClass { public Object field; } があるとき、frameworkClass.field = new AppClass() ができる。
2011-08-20 11:51:43all classes in the "java.* packages can only be defined by the bootstrap class loader. だけは活用できる可能性がある。 http://t.co/9KBPkvv
2011-08-20 11:57:34superclassを辿りながらlookupした結果ヒットしたクラスで、java.* なクラスのキャッシュは、BootstrapTemplateRegistry にキャッシュする案。このケースを除いて、BootstrapTemplateRegistryはimmutable。
2011-08-20 12:01:22ぃゃ Root の TemplateRegistry が immutable である必要は何だろう…。子の TemplateRegistry に登録したクラスの superclass のキャッシュが登録されてしまうとマズイからか。
2011-08-20 12:04:49superclassをlookupした結果のキャッシュは、parent.cache ではなく this.cache にキャッシュするべきなのかな。
2011-08-20 12:07:01ぃゃ現状でもそうだな。interfaceの方はparent.registerだな…これはthis.registerかな。
2011-08-20 12:07:52@frsyuki おぉ… ちょうど template registry をレビューされてるんですね
2011-08-20 12:11:53@muga_nishizawa そうなんです。TemplateRegistryどうするか問題を考えつつ、です。
2011-08-20 12:12:46TemplateRegistry.register を呼ばないケースでも、毎回 new MessagePack() したくない理由の一つは、HashMap や ArrayList をシリアライズするために superclass lookup が入ってしまう点。
2011-08-20 12:14:32Root の template registry の cache を immutable にした方がよいというのは、例えば、string オブジェクトの default template を上書きされたくないからという理由があります。
2011-08-20 12:17:08もし default template の挙動を変えたければ、子の template registry にその template を登録したらよいのではないかなと思って、そのデータ構造になってます。
2011-08-20 12:17:57superclass/interface lookup にたどり着くまでに、TemplateBuilderChain.select とかリフレクションがいくつか入るので。new MessagePack().write(xxx) は、newのコストに加えてリフレクション分遅い。
2011-08-20 12:18:33もちろん全く新しい template registry を作って、そっちの default の string template を上書きすればよいということも考えられます。ただ、重複した default templates は複数あるので、入れ子の構造の方がよいかと思いました。
2011-08-20 12:19:32TODO: root template registry の template cache を immutable にする…
2011-08-20 12:23:07親にregisterしたときに子にも反映されればOKかな。というのは msgpack = new MessagePack(); json = new JSON(msgpack); msgpack.register(MyClass.class) のため。
2011-08-20 12:24:03@muga_nishizawa 見たところ、TemplateRegistry.java:247 の parent.register を register にすれば、parentが変更されることは無さそうです。
2011-08-20 12:25:35@muga_nishizawa parent.lookupGenericImpl時にキャッシュは追加されるかもしれませんが、それはOKですよね。
2011-08-20 12:25:51