Поля екземплярів (включаючи резервні поля власності) отримують N-копії для N-об'єктів.
Статичні поля отримують одну копію на клас.
Методи - це блоки байт-коду (або після JIT, блоки нативних інструкцій), які є частиною програмного "зображення" або виконуваного сегмента коду. Методи вже є частиною зображення програми, оскільки вона сидить на диску. Після завантаження зображення ОС (або CLR), є одна спільна копія коду методу.
Вони взагалі не є частиною розподілу "купи" або розподілу часу, за винятком випадків, коли ви можете використовувати компілятор, що використовується в обробці, для складання нових методів на ходу. Методи не «виділяються» як об'єкти і не «виділяються» щодо створення об’єкта. Вони просто існують як частина програми до того, як один об'єкт коли-небудь інстанціюється. Навіть лямбда / делегати не виділяються з льоту. Компілятор створює класи на вимогу для реалізації цих інших, здавалося б, динамічних об'єктів коду, і вони також існують як частина зображення байт-коду на диску.
ОНОВЛЕННЯ за коментарі:
Стандарт JVM має таке значення:
2.5.4. Область методу
У віртуальної машини Java є область методів, яка поділяється між усіма потоками віртуальної машини Java. Область методу аналогічна області зберігання для складеного коду звичайної мови або аналогічна сегменту "текст" в процесі операційної системи. Він зберігає структури за класом, такі як постійний пул часу виконання, дані про поле та методи, а також код для методів та конструкторів, включаючи спеціальні методи (§2.9), що застосовуються при ініціалізації класів та екземплярів та ініціалізації інтерфейсу.
Область методу створюється при запуску віртуальної машини. Хоча область методу логічно є частиною купи, прості реалізації можуть вирішити не збирати сміття чи ущільнювати його. Ця версія специфікації Java Virtual Machine не передбачає розташування області методу або політики, що використовуються для управління компільованим кодом. Область методу може мати фіксований розмір або може бути розширена, як вимагає обчислення, і може бути скорочена, якщо більша область методу стає непотрібною. Пам'ять для області методу не повинна бути суміжною.
Тож зрозуміло, що (1) так, специфіка не диктує, як це робиться, але (2) аналогічно області зберігання для складеного коду звичайної мови, тобто. текстовий сегмент. Це я і роблю.