BigObject를 지속적으로 추가하는데, 참조 관계는 다음과 같나요?
그렇다면 ygc가 발생하는 건가요? arrayList 객체가 기존 영역에 들어가지 않으면 세대 간 참조가 발생하지 않을까요? 들어가면 ygc 이후에 obj = new BigObject()가 새로운 세대에 할당되고 list.add(obj)가 할당되면 old->young 영역에 대한 참조가 있지 않을까요? 할당 같은?
다음 코드를 실행하세요:
매개변수: /jdk1.7.0_79.jdk/bin/java -Xmx500M -Xms500M -Xmn200M -XX:+UseConcMarkSweepGC -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를 보면 할당() 메서드를 실행한 후에도 이전 영역이 여전히 90% 이상 점유되어 CMS GC가 계속 수행되지만 재활용할 수 없는 것으로 나타납니다.
高洛峰2017-05-17 10:09:27
최근에 귀하에게 유용할 수 있는 두 가지 기사를 봤습니다.
http://zhuanlan.51cto.com/art...
http://zhuanlan.51cto.com/art...