У меня есть один, наверное, немой вопрос. В настоящее время я тестирую CSP solvers choco и jacop. Когда я запускаю профилирование приложения (раскраска графа, около 3000 узлов), я не полностью понимаю результаты.Java использовал кучу против выделенного размера объекта
Используемое пространство кучи, указанное профайлером, составляет около 1 ГБ памяти. Сумма всего созданного объекта меньше 100 МБ. Где остальные 900 МБ ОЗУ?
Я думаю, что методы вызова (решатели, вероятно, используют массивное обратное отслеживание) выделяются в стеке, поэтому здесь не должно быть проблемы. Когда я уменьшить максимальный объем памяти с помощью XMX параметров, приложение завершается с исключением:
Исключение в потоке «основной» java.lang.OutOfMemoryError: GC предел накладных расходов превысил
Таким образом, кажется, что все остальное разве неиспользованными несобранные памяти (потому что в этом случае GC будет бороться с ним (и не подведет)).
Благодарим за помощь.
Уверены ли вы, что на визуализаторе выделенного объекта не установлен какой-либо фильтр? Какой профайлер вы используете? Также, пожалуйста, вставьте результаты своего профилировщика, если данные не чувствительны. –
Я использую профилировщик netbeans - http://img405.imageshack.us/i/profilerd.png/ Последняя точка используемой памяти - 374 МБ (все еще намного больше, чем в выделенных объектах) ... – malejpavouk
На пике (в прямом эфире результаты), самый большой массив имеет около 30 МБ (все остальное пропорционально меньше) ... – malejpavouk