Этот ответ неверен.
Добавление реализованных интерфейсов или методов не влияет на объем памяти, необходимый для отдельных экземпляров класса.
Прежде всего, концептуально это не имеет смысла.
Реализованные интерфейсы и методы являются информацией для каждого класса. Два экземпляра одного и того же класса всегда будут реализовывать одни и те же интерфейсы и иметь одинаковые методы. Таким образом, для JVM нет смысла хранить эту информацию для каждого объекта.
Во-вторых, вы можете легко проверить это с помощью примера кода, подобного следующему:
public class MyClass implements Comparable<MyClass> {
private final long l;
MyClass(long l) {this.l = l;}
@Override
public int compareTo(MyClass o) {
return 0;
}
public static void main(String[] args) {
long l = 0;
try {
var list = new ArrayList<MyClass>();
while (true) {
list.add(new MyClass(l++));
}
} catch (OutOfMemoryError e) {
System.out.println("Created " + l + " objects before things went south ...");
}
}
}
Запуск этого с помощью -Xmx32m
с использованием Java 11 создаст для меня около 200000 объектов при каждом запуске (с небольшими вариациями, возможно, из-за деталей G C).
Удаление интерфейса Comparable
и / или compareTo
метод существенно не меняет это значение.
Вы можете попробовать добавить дополнительные поля или удалить l
, что изменит число.