Вы пробовали скомпилировать и сравнить байт-код? Вот мои результаты. Для:
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
Если вы посмотрите на VM Spec для файлов классов , вы увидите, что есть битовое поле постоянного размера для указания модификаторов доступа, поэтому не должно быть сюрпризом, что сгенерированные файлы одинакового размера.
Короче говоря, ваши модификаторы доступа не будут влиять на размер сгенерированного байтового кода (это также не должно влиять на производительность). Вы должны использовать модификатор доступа, который имеет больше смысла.
Я должен также добавить, что есть небольшая разница, если вы измените внутренний класс с объявленного static
на не объявленный static
, поскольку это подразумевает дополнительное поле, ссылающееся на внешний класс. Это займет немного больше памяти, чем если бы вы объявили внутренний класс static
, но вам было бы безумно оптимизировать это (используйте static
там, где это имеет смысл, и где вам нужно, чтобы он был нестатичным, это нестатично, но не запутывайте свой дизайн, просто чтобы сохранить указатель памяти здесь или там).