Вы пробовали скомпилировать его и сравнить байт-код? Вот мои результаты. За:
public class Example {
public static void main(String[] args) {
System.out.println("Hello world!");
}
private static class A {
A(){}
}
}
Приведенное выше дает следующие файлы * .class:
-rw-r--r-- 1 michaelsafyan staff 238 Feb 10 00:11 Example$A.class
-rw-r--r-- 1 michaelsafyan staff 474 Feb 10 00:11 Example.class
Теперь, если я перемещаю файлы классов, удаляю модификатор private
и перекомпилирую, я получаю:
-rw-r--r-- 1 michaelsafyan staff 238 Feb 10 00:15 Example$A.class
-rw-r--r-- 1 michaelsafyan staff 474 Feb 10 00:15 Example.class
Если вы посмотрите спецификацию ВМ для файлов классов, вы увидите, что существует битовое поле постоянного размера для указания модификаторов доступа, поэтому неудивительно, что сгенерированные файлы имеют одинаковый размер.
Короче говоря, ваши модификаторы доступа не повлияют на размер сгенерированного байтового кода (это также не должно влиять на производительность). Вам следует использовать наиболее разумный модификатор доступа.
Я также должен добавить, что есть небольшая разница, если вы измените внутренний класс с объявленного static
на не объявляемый static
, поскольку это подразумевает дополнительное поле, ссылающееся на внешний класс. Это займет немного больше памяти, чем если бы вы объявили внутренний класс static
, но вы были бы безумны, если бы оптимизировали для этого (используйте static
там, где это имеет смысл, и где вам нужно, чтобы он был нестатическим, сделайте его нестатичным , но не сворачивайте свой дизайн только для того, чтобы сохранить указатель памяти здесь или там).
person
Michael Aaron Safyan
schedule
10.02.2011