BigObjectを続けて追加すると、 参照関係は以下のようになるでしょうか
その後 ygc が発生しますが、BigObject は古い領域に入ったのでしょうか? arrayList オブジェクトが古い領域に入っていない場合、世代間参照はないのでしょうか?入った場合、ygcの後、obj = new BigObject()が新世代に割り当てられ、list.add(obj)でold->young領域への参照があるのではないか?割り当てのような?
次のコードを実行します:
Parameters:/jdk1.7.0_79.jdk/bin/java -Xmx500M -Xms500M -Xmn200M -XX: UseConcMarkSoupGC -XX: UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=90 -XX: PrintGCApplicationConcurrentTime - XX : PrintGCApplicationStoppedTime -XX: PrintHeapAtGC -XX: PrintGCDateStamps -XX: PrintHeapAtGC -XX: PrintGCDateStamps -verbose:gc -XX: PrintGCDetails -Xloggc:/Users/*/temp/test.gc.log
gc.log を見ると、allocate() メソッドを実行した後も古い領域が 90% 以上占有されており、CMS GC は継続的に実行されていますが、再利用できません。
私は最近、あなたに役立つかもしれない 2 つの記事を見ました:
http://zhuanlan.51cto.com/art...
http://zhuanlan.51cto.com/art...