Все классы, составляющие ваше приложение, выделяют память из одного и того же «пула» памяти.Хотя JVM может знать сайт (например, класс / метод / строку) запроса на выделение памяти, который не был выполнен (и который привел к GC), он не знает или не понимает, что класс является «ответственным» за GC.
Может случиться, что x
выделит 99,99% памяти, доступной в eden, а затем появится некоторый код в y
, попытается выделить несколько байтов и появится GC.Является ли y
действительно ответственным за GC?
Если вы хотите определить, какие классы отвечали за распределения, которые использовали много кучи, вам нужно было бы запустить свой код с профилировщиком некоторого вида.Сначала вы захотите найти, какие классы были наиболее распределены, а затем вы захотите, откуда эти классы были выделены.Предположительно, вы сможете отобразить имя метода, в котором он размещен, обратно на банку, в которой объявлен этот метод.