Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boolean в памяти, сколько занимает? 
:(
    Опции темы
Antropoid
Дата 4.11.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 2
Всего: 16



САБЖ.
В разных источниках написано по разному. Кому верить?
СУВ.


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
LSD
Дата 4.11.2007, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Implementation dependent smile 

А вообще есть такой код:
Код

  public static void main(String[] args)
  {
    boolean[] data;
    Runtime runtime = Runtime.getRuntime();
    gc();
    long memBefore = runtime.totalMemory() - runtime.freeMemory();
    data = new boolean[32 * 1024 * 1024];
    gc();
    long memAfter = runtime.totalMemory() - runtime.freeMemory();
    System.out.println("size = " + (memAfter - memBefore) / ((double) data.length));
  }

  private static void gc()
  {
    System.gc();
    System.gc();
    System.gc();
    System.gc();
  }



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Antropoid
Дата 4.11.2007, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 2
Всего: 16



Цитата(LSD @  4.11.2007,  22:20 Найти цитируемый пост)
Implementation dependent

 smile 
а как же Portable ?

и не понял код...у меня высветилось size = 1.0000004768371582 . О чем это говорит? 



--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
LSD
Дата 4.11.2007, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



Цитата(Antropoid @  4.11.2007,  23:42 Найти цитируемый пост)
а как же Portable ?

А при чем тут портабельность?
Во вне boolean всегда пишется единообразно (например DataOutputStream пишет его как int). А уж как он представляется внутри самой JVM, это дело самой JVM. Тот же int можно представлять как угодно, главное чтобы он мог хранить весь диапазон указанный в спецификации, а так пускать хоть 8 байт занимает, если так быстрей и удобней.

Цитата(Antropoid @  4.11.2007,  23:42 Найти цитируемый пост)
и не понял код...у меня высветилось size = 1.0000004768371582 . О чем это говорит? 

Это говорит о том, что занимается один байт (дробная часть от накладных расходов и всяких фоновых процессов).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Antropoid
Дата 4.11.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 2
Всего: 16



Цитата(LSD @  4.11.2007,  23:03 Найти цитируемый пост)
А при чем тут портабельность?

Цитата

the sizes of primitive data types and the
behavior of the arithmetic on them are specified.
(с) SCJP Exam for J2SE 5, Paul Sanghera


Цитата(LSD @  4.11.2007,  23:03 Найти цитируемый пост)
Тот же int можно представлять как угодно, главное чтобы он мог хранить весь диапазон указанный в спецификации, а так пускать хоть 8 байт занимает, если так быстрей и удобней.

А мы точно об одном и том же говорим? Т.е. int - это не 4 байта? а double - не 8 ?





--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
LSD
Дата 4.11.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15709
Регистрация: 24.3.2004

Репутация: 209
Всего: 537



В данном случае size, можно трактовать по разному, как объем памяти требуемых под одну переменную, и как диапазон значений которые в ней будут храниться. Для совместимости JVM важно, чтобы совпадали диапазоны и поведение арифметических операций, а количество байт в данном случае не важно.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
jer1
Дата 5.11.2007, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 24.1.2005
Где: Харьков Украина

Репутация: 4
Всего: 5



from http://www.javaspecialists.eu/archive/Issue029.htmlhttp://www.javaspecialists.eu/archive/Issue142.html
Цитата

The amount of memory can be determined by looking at the data members of the class and all the superclasses' data members. The algorithm I use works as follows:

   1. The class takes up at least 8 bytes. So, if you say new Object(); you will allocate 8 bytes on the heap.
   2. Each data member takes up 4 bytes, except for long and double which take up 8 bytes. Even if the data member is a byte, it will still take up 4 bytes! In addition, the amount of memory used is increased in 8 byte blocks. So, if you have a class that contains one byte it will take up 8 bytes for the class and 8 bytes for the data, totalling 16 bytes (groan!).
   3. Arrays are a bit more clever, at least smaller primitives get packed. I'll deal with these later.

 
Код

class A {
   boolean b1, b2, b3;
}

будет занимать 24 байта =   8 (от Object ) +  3 * 4 (члены класса)  = 20 байт + 4 байт (чтобы было кратно 8)
--------------------
:w!q
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1369 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.