Я работаю над программой, которая постоянно работает с гигабайтами данных, в основном с примитивами и строками. Мне нужно избегать преобразования примитивов в объекты с помощью автоупаковки, поскольку это увеличивает размер кучи и время сборки мусора.
В настоящее время я вношу изменения и запускаю код в VisualVM и вижу, что у меня есть миллионы дополнительных целых или коротких чисел или объектов. Затем я просматриваю код в отладчике в своих библиотеках и классах JDK, чтобы найти, где происходит упаковка. Есть ли инструменты, чтобы помочь с этим?
Я использую Intellij в качестве своей IDE. В Intellij вы можете использовать проверку, чтобы найти автоупаковку в своем собственном коде, но, похоже, она не распространяется на библиотечный код. Для этого выберите в меню:
Analyzye >> Запустить проверку по имени...
Затем введите «авто» в командной строке. Для выбора должна появиться проверка автобокса.
Однако на данный момент я практически полностью удалил автоматическое упаковывание из своего кода. Что мне нужно, так это иметь возможность узнать, когда я передаю примитив в библиотечный метод, является ли код библиотеки автоматически упаковывающим примитив в любой момент.
Integer sum = 0; for (int value : values) sum += value;
является допустимым кодом, но создаст дополнительный целочисленный объект для каждого членаvalues
. - person VGR   schedule 20.03.2016