2016-04-01 4 views
-1

Как новый оператор выделяет память для объекта в Java? было спрошено, что произойдет, если мы напишем Тест t = новый тест(). Как новый оператор будет работать, чтобы выделить память внутри памяти кучи? Могут быть некоторые шаги.Новый оператор Внутреннее распределение памяти в куче

+3

http://stackoverflow.com/questions/13926518/what-does-the-new-keyword-do – imoteb

+0

Я понимаю, но не получил подходящих анс, если вы знаете, пожалуйста, пожалуйста. – Aditya

+0

Это НЕ сайт для такого вопроса. – SubliemeSiem

ответ

0

Реализация зависит от JVM. Существует ряд возможных результатов.

  • Если объект не нужен, его можно устранить, т. Е. Ничего не произойдет.
  • Если Escape Analysis обнаруживает, что объект не выходит из метода, он может поместить его в стек. Это распределение происходит, когда кадр запускается, и вся необходимая память зарезервирована за один раз (не для каждого объекта).
  • , если у вас есть TLAB (потоковые локальные буферы распределения) (по умолчанию), каждый поток имеет локальный буфер из которые выделяют объекты. Это позволяет параллельно распределять память. Он имеет указатель на следующее свободное пространство в буфере и при добавлении нового объекта принимает указатель и добавляет размер объекта. Он также возвращает нужный объект (и настраивает заголовок объекта). Новые буферы выделены из пространства Eden (за исключением G1, где он получает пустой кусок памяти)
  • , если у вас нет TLAB, выделение выполняется непосредственно из пространства eden.
+0

Благодарим за обмен знаниями. @ Peter – Aditya

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