2015-05-04 3 views
2

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

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 не возвращать полезно хиты.

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

ответ

3

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

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

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

+0

Мне нравится, когда люди самонастраиваются на вещи :) Я не уверен, что «что-то еще» является хорошим понятием: кажется, что он снова и снова путешествует. Но я не могу найти лучшего (короткого) описания. –

Смежные вопросы