Сколько памяти Java возражает использованию, когда все его участники являются пустыми?

Пакет NIO Java (с Java6), оказывает поддержку для не блокирующийся ввод-вывод только, через Селектор с. Java7, надо надеяться, собирается поставляться с NIO.2, который включает асинхронную поддержку ввода-вывода. Сегодня, Ваш лучший выбор состоит в том, чтобы использовать платформу. Перемирие упомянуло Mina. Вот некоторые другие.

  1. Гризли . Это - ядро ввода-вывода для Sun сервер GlassFish . Гризли предоставляет средство для того, чтобы сделать асинхронные чтения/записи (с помощью модели очереди). Это поддерживает TCP и UDP одинаково. Я использовал Гризли в нескольких проектах. Существуют вещи, которые я люблю и не люблю о платформе, но детализировать это - действительно другая тема. Я скажу, что довольно легко разбудить что-то и выполнение, и Гризли делает большой тяжелый подъем для Вас.
  2. Netty. Этот проект появляется от одного из исходных авторов на проекте Mina. Я не использовал этого так, я не знаю приблизительно о его поддержке асинхронного ввода-вывода. Необходимо смотреть.

Теперь, относительно Вашего вопроса о потоках, Селекторы NIO не используют потоки для неблокирования ввода-вывода. В JDK6 они используют выбор () в соответствии с Windows и epoll средством на более новых ядрах Linux. Для асинхронного ввода-вывода распараллеливающие детали зависят от платформы.

13
задан Hanno Fietz 18 September 2009 в 12:25
поделиться

5 ответов

Нет, вам нужно 4 или 8 байтов (в зависимости от того, 32 или 64-битная система) для каждого нуля, который вы храните в поле. Как объект узнает, что его поле пусто, если где-то не хранится что-то, что могло бы сообщить об этом?

17
ответ дан 1 December 2019 в 21:38
поделиться

Нет, null - это тоже информация, и ее тоже нужно сохранить.

6
ответ дан 1 December 2019 в 21:38
поделиться

Сами ссылки на объекты по-прежнему будут занимать некоторую память, поэтому единственная реальная экономия памяти будет связана с объектами кучи, на которые можно было бы ссылаться.

Итак, если у вас есть

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.

1
ответ дан 1 December 2019 в 21:38
поделиться

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.

1
ответ дан 1 December 2019 в 21:38
поделиться

Что насчет класса, объекта и метода имена? Поскольку вы можете вызывать, обращаться к ним или создавать их экземпляры с помощью Java Reflection, имена тоже нужно где-то хранить, верно? Но CMIIW.

0
ответ дан 1 December 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: