Что такое "(что-то еще)" в jol GraphLayout output?

При использовании класса jol GraphLayout для печати графика объектов, ссылающихся на экземпляр объекта, некоторые из выходных записей говорят "(что-то еще" "вместо типа и ссылочного пути. Например, рассмотрим следующий код, который печатает график списка из 20 случайных объектов Integer:

List<Integer> foo = new Random().ints(20).boxed().collect(Collectors.toList());
System.out.println(GraphLayout.parseInstance(foo).toPrintable());

Этот код печатает:

java.util.ArrayList object externals:
          ADDRESS       SIZE TYPE                PATH                           VALUE
         d642ecc8         24 java.util.ArrayList                                (object)
         d642ece0         16 java.lang.Integer   .elementData[0]                212716192
         d642ecf0         56 (something else)    (somewhere else)               (something else)
         d642ed28         16 java.lang.Integer   .elementData[1]                1503736768
         d642ed38         16 java.lang.Integer   .elementData[2]                -2099759732
         d642ed48         16 java.lang.Integer   .elementData[3]                445566433
         d642ed58         16 java.lang.Integer   .elementData[4]                -1528625708
         d642ed68         16 java.lang.Integer   .elementData[5]                -555424299
         d642ed78         16 java.lang.Integer   .elementData[6]                1607595284
         d642ed88         16 java.lang.Integer   .elementData[7]                763466772
         d642ed98         16 java.lang.Integer   .elementData[8]                638331919
         d642eda8         16 java.lang.Integer   .elementData[9]                -1742026575
         d642edb8         16 java.lang.Integer   .elementData[10]               1920101909
         d642edc8         80 (something else)    (somewhere else)               (something else)
         d642ee18         16 java.lang.Integer   .elementData[11]               2001035318
         d642ee28         16 java.lang.Integer   .elementData[12]               -1920666937
         d642ee38         16 java.lang.Integer   .elementData[13]               -991335829
         d642ee48         16 java.lang.Integer   .elementData[14]               -47760298
         d642ee58         16 java.lang.Integer   .elementData[15]               855824902
         d642ee68        104 [Ljava.lang.Object; .elementData                   [212716192, 1503736768, -2099759732, 445566433, -1528625708, -555424299, 1607595284, 763466772, 638331919, -1742026575, 1920101909, 2001035318, -1920666937, -991335829, -47760298, 855824902, 2137884845, -226328690, 1472718384, 890105604, null, null]
         d642eed0         16 java.lang.Integer   .elementData[16]               2137884845
         d642eee0         16 java.lang.Integer   .elementData[17]               -226328690
         d642eef0         16 java.lang.Integer   .elementData[18]               1472718384
         d642ef00         16 java.lang.Integer   .elementData[19]               890105604

Поиск jol "something else" в DuckDuckGo, и Google не возвратил никаких полезных хитов.

Что представляют записи "(что-то еще" )?

Ответ 1

"(что-то еще)" означает именно это - что-то, что не является частью этого графа объектов. Там могут быть другие (живые или мусорные) объекты или просто пробел в куче для какой-то внутренней причины VM.

Обратите внимание, что таблица объектов в графе сортируется по адресу. Массив ArrayList elementData лениво инициализируется при добавлении первого элемента, и когда десятый элемент добавляется в список, elementData перераспределяется, чтобы освободить место для большего количества элементов. Это создает промежутки в области кучи, соответствующие массивам (теперь-мусор), и jol печатает их как записи "(что-то еще)". Код, ответственный за печать этих записей, GraphLayout строка 246 (по крайней мере, с этой публикации).

jol печатает эту информацию о разрыве кучи, чтобы помочь понять поведение сборщика мусора. Некоторые из более поздних jol примеров демонстрируют это, например, пример уплотнения показывает, как объекты, ссылающиеся на ArrayList, изначально разрежены, но уплотняются сборщиком мусора.