Я запускаю Java-клиент с Java JRE на 32-битных окнах, с
java -Xmx1024m -Xms1024m -verbose:gc -XX:+PrintGCDetails -jar myJar.jar
Мой jar содержит много данных (таблицы двойников, 600ish MB), которые остаются в памяти на протяжении всей жизни приложения.
Затем выдает сообщения о каждой минуте, в которых говорится:
[GC [DefNew: 279616K-> 279616K (314560K), 0,0002037 секунд] [Срок владения: 595827K-> 599952K (699072K), 1,1020398 секунд] 875443K-> 599952K (1013632K), [1013632K], [ 10042K-> 10042K (16384K)], 1,1030218 с] [Время: пользователь = 1,09 сис = 0,01, реальное = 1,11 с]
и я действительно не понимаю смелую часть. Он говорит, что новое поколение идет от 279616K до 279616K (то есть ничего не изменилось), старое поколение немного увеличилось (595827K-> 599952K), но в целом оно говорит 875443K-> 599952K, то есть сокращение ~ 30%. Как это может быть?
edit: чтобы быть совершенно ясным, я ожидал, что если я добавлю 279616K + 595827K = 875443K, я получу первую часть, выделенную жирным шрифтом, то есть общий размер кучи. Точно так же я ожидал, что 279616K + 599952K будет означать вторую часть жирным шрифтом, но это не так. В ссылке Сообщения журнала сбора мусора Java , указанной ниже, она добавляет , поэтому я, вероятно, что-то упускаю.