Статический метод Распределение памяти - PullRequest
10 голосов
/ 06 октября 2011

У нас есть две классификации кучи и стека. Когда объект создается, память для объекта сохраняется в куче. Что если в классе есть статические методы, которые можно вызывать с помощью имени класса. Если объект не создан, то как он будет выделять память, и если он это делает, где он будет выделять память?

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

Это зависит от JVM, но статические поля обычно хранятся в специальном объекте в куче.(Вы можете увидеть это в дампе кучи) Когда ClassLoader выгружен, его классы и их статические «объекты» / поля также очищены.

Единственное, что отличается от статического «объекта», это то, что вы можетене получить ссылку на это.(Но вы можете использовать отражение для доступа к полям)

1 голос
/ 06 октября 2011

Методы (т.е. код) не хранятся в объекте; все объекты класса будут совместно использовать код для метода. Независимо от языка (Java, C ++ или практически что-либо еще) для любого метода будет только одна копия кода, статическая или нет. Обычно есть определенная область памяти - то есть сегмент CODE на родном языке, таком как C ++, или специальная область кучи в Java - где загружается код.

...