Да, все объекты расположены в куче.Т.е. все, что создано с помощью new
, будет помещено в кучу.Таким образом, все поля таких объектов также находятся в куче.
Полагаю, вы ссылаетесь на локальные переменные и параметры в функциях.Они помещаются в стек (для каждого вызова функции).Обратите внимание, однако, что когда переменные / параметры функции относятся к ссылочным типам, то фактический объект, на который они указывают, находится в куче, но сама переменная / параметр будет в стеке (аналогично указателю в C / C ++).С другой стороны, функциональные переменные / параметры примитивных типов (например, int
, double
и т. Д.) Будут полностью в стеке.Немного связанным, но относящимся к теме, является понятие boxing .
Сами функции являются статическим кодом и хранятся в специальной части памяти, где находится весь исполняемый код.Обратите внимание, что все экземпляры класса совместно используют одни и те же функции (т. Е. «Новые функции» не создаются с вновь созданными объектами, даже если эти функции являются функциями экземпляра ).Таким образом, когда вы вызываете функцию экземпляра для объекта, специальная ссылка this
передается этой функции (это неявный аргумент функции).Вот как функция знает, на какие объекты она должна воздействовать.