Пакет NIO Java (с Java6), оказывает поддержку для не блокирующийся ввод-вывод только, через Селектор с. Java7, надо надеяться, собирается поставляться с NIO.2, который включает асинхронную поддержку ввода-вывода. Сегодня, Ваш лучший выбор состоит в том, чтобы использовать платформу. Перемирие упомянуло Mina. Вот некоторые другие.
Теперь, относительно Вашего вопроса о потоках, Селекторы NIO не используют потоки для неблокирования ввода-вывода. В JDK6 они используют выбор () в соответствии с Windows и epoll средством на более новых ядрах Linux. Для асинхронного ввода-вывода распараллеливающие детали зависят от платформы.
Нет, вам нужно 4 или 8 байтов (в зависимости от того, 32 или 64-битная система) для каждого нуля, который вы храните в поле. Как объект узнает, что его поле пусто, если где-то не хранится что-то, что могло бы сообщить об этом?
Нет, null - это тоже информация, и ее тоже нужно сохранить.
Сами ссылки на объекты по-прежнему будут занимать некоторую память, поэтому единственная реальная экономия памяти будет связана с объектами кучи, на которые можно было бы ссылаться.
Итак, если у вас есть
MyClass {
public Object obj;
MyClass(Object o) { obj = o; }
}
MyClass a = new MyClass( new HashMap() );
MyClass b = new MyClass( null );
] два объекта a
и b
сами занимают одинаковый объем памяти (они оба содержат одну ссылку), но объект obj
, на который ссылается ] a
занимает память в куче, поэтому эту память можно было сохранить, установив для ссылки значение null.
The Java Language Specification and the Java Virtual Machine Specification do not say anything about the size of Java objects in memory - it is deliberately left undefined, because it depends on the implementation of the JVM. This means that you cannot make any assumptions on how much memory a Java object uses in general or what the memory layout of a Java object in memory is.
As others have already said: A reference (variable) takes up memory, whether the reference is null
or not. Your objects will not shrink and take up less memory when you set member variables to null
.
Что насчет класса, объекта и метода имена? Поскольку вы можете вызывать, обращаться к ним или создавать их экземпляры с помощью Java Reflection, имена тоже нужно где-то хранить, верно? Но CMIIW.