У меня есть программа на Java, которая создает дюжину массивов длиной примерно 160 миллионов каждый. Массивы содержат примитивы (char, short и float). В моем алгоритме я заметил (с помощью jprofiler), что сборщик мусора работает в моей системе довольно часто (машина с виртуальной машиной Windows в облаке Google, 16 ядер ЦП, 64 ГБ ОЗУ), но я не могу понять, почему сборщик мусора работает так часто и потребляют 80% общей вычислительной мощности процессора.
Поэтому я подумал: если бы я мог выяснить (либо с помощью команд/журналов jvm, либо, предпочтительно, с помощью профилировщика, такого же, как jprofiler), какие именно объекты это был «сбор мусора», у меня был бы шанс понять, что происходит, и либо исправить простой проблема или перепроектирование, основанное на моем лучшем понимании того, что делает Java. (Насколько мне известно, я свел к минимуму создание объектов; хотя я использую много функций параллельной потоковой передачи jdk8, поэтому я не знаю, вызывает ли это как-то проблемы с сборкой мусора.) Есть ли способ определить какие объекты (или какие типы объектов) сборщик мусора пытается собрать в определенное время, чтобы я мог лучше понять, почему сборщик мусора работает так часто и так интенсивно?