検索

ホームページ  >  に質問  >  本文

java - ArrayList のメモリ割り当て、世代間参照 gc の問題

JVM における ArrayList のメモリ割り当ては何ですか?

リーリー

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 は継続的に実行されていますが、再利用できません。

黄舟黄舟2772日前903

全員に返信(1)返信します

  • 高洛峰

    高洛峰2017-05-17 10:09:27

    私は最近、あなたに役立つかもしれない 2 つの記事を見ました:

    http://zhuanlan.51cto.com/art...
    http://zhuanlan.51cto.com/art...

    返事
    0
  • キャンセル返事