2013-12-08 4 views
0

Я проверяю объекты, и я заметил, что размер java.lang.String всегда 24 байта, независимо от текста, который он содержит.где java хранить собственные объекты

Например:

String str1 = "testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest"; 
String str2 = "test"; 

При вычислении размера строки с помощью этого метода:

String test = "hello"; 
for(int i=0; i<10000; i++){ 
    test += test + i; 
} 
log.debug(Agent.inst.getObjectSize(test)); 

Это говорит мне, что обе строки 24 байта.

Я знаю, что все объекты хранят только адрес значения, и это значение статично, но я не понимаю, что я наблюдаю. Что происходит?

+0

Возможный дубликат: http://stackoverflow.com/questions/4918399/what-type-of-memory-heap-or-stack-string-constant-pool-in-java-gets-stored –

+0

Возможный дубликат: http : //stackoverflow.com/questions/19402207/java-variable-placed-on-stack-or-heap –

+0

В Java нет такой вещи, как «собственный объект». – EJP

ответ

1

Метод измерения размера объекта, который вы используете только слишком сырой: она дает вам размер только String самому экземпляра, а не все остальные случаи это относится к — размеру его графа объекта всего . Существующие инструменты используют грубый вызов, который вы использовали, в сочетании с отражением, чтобы пройти остаток графика объекта, вызывая тот же метод на каждом шаге.

В частности, String хранит символьные данные в char[], чей объект размером самое непосредственное отношение к общей памяти, занятой String, для любой длинной строки.

+0

Какие инструменты вы говорите? –

+0

Visualvm может показать вам размер графиков объектов. –

+0

Спасибо, я попробую этот инструмент, если у меня есть 2 объекта, которые ссылаются на один и тот же объект (например, String). В кучном пространстве VM есть только 1 объект и 2 ссылки справа? –

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