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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Java Non-Heap Usage 
:(
    Опции темы
sith
Дата 4.11.2011, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



всем привет.


недавно узнал что есть такая штука как  Java non-heap memory.  Кто то когда то сталкивался с использованием этой области памяти. Как туда что то ложить и вытягивать. может есть какието доки по этому поводу???


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
Stolzen
Дата 5.11.2011, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Non-heap? Полагаю, что речь идет о PermGen - области памяти, в которой хранится метадата о всех загруженных классах + кое что еще. 
Тут можно почитать о поколениях в памяти jvm (там речь о HotSpot) и о том, как это влияет на сборку мусора. 


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
sith
Дата 5.11.2011, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



не совсем... я слышал об этом из разговора нескольких програмистов ... и скажем так лишь краем уха... речь шла о том что в джаве можно использовать некую  non-heap  память. в целях кеширования своих обьектов. возможно это и она и есть... но мне нужна информация как туда что то писать и читать...


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
Stolzen
Дата 5.11.2011, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Цитата(sith @  5.11.2011,  10:59 Найти цитируемый пост)
некую  non-heap  память. в целях кеширования своих обьектов

Например строки, которые кешируются с помощью метода intern(), идут в PermGen.

Возможно (не уверен) статические перменные тоже живут в пермгене - но я так понимаю, в спецификации это точно не обозначено, реализация зависит от вендора. Ведь проблема в том, что статические перменные можно переназначить, значит будут появлятся объекты, которые нужно собрать сборщиком. А это вряд ли хорошо для пермгена. 








--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
sith
Дата 5.11.2011, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



мне было итересно все таки... если есть  non-heap  память... могу ли я с ней работать, ложить и четать от туда обьекты... естественно сам забочась о сборке мусора


--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
Stolzen
Дата 5.11.2011, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



А можно поинтересоваться, для какой цели это нужно? 

Цитата(sith @  5.11.2011,  13:21 Найти цитируемый пост)
естественно сам забочась о сборке мусора

Как это?


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
sith
  Дата 5.11.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



smile хм... точно еще не знаю... smile



--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
Skynin
Дата 5.11.2011, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 10



PermGen тоже подпадает под работу сборщика мусора если указать опции.

Наверное имелась ввиду память выделяемая средствами ОСи а не JVM.
Выделение и работа с такой памятью осуществляется написанием бинарного кода, платформозависимого кода и работой с ним через JNI/JNA
Применяется в высоконагруженных системах, и возможно реализован в серьезных фреймвораках кэширования.

PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
COVD
Дата 5.11.2011, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



http://www.terracotta.org/products/bigmemory ?
Цитата

BigMemory is pure Java and provides an in-process, off-heap cache that lets you store large amounts of data—up to a terabyte—closer to your application

PM MAIL   Вверх
Skynin
Дата 5.11.2011, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 10



Аха, и сам не знал:
BigMemory achieves off-heap storage using Direct ByteBuffers, which is a feature introduced with NIO in Java 1.4 to allow zero copy buffers between Java applications and the operating system as it's not possible with memory belonging to Java heap because of unstable location
How does BigMemory hide objects from the Java garbage collector?

Direct buffers

NIO supports a type of ByteBuffer usually known as a direct buffer. Direct buffers can essentially be used like any other ByteBuffer (and are implemented as a ByteBuffer subclass), but have the property that their underlying memory is allocated outside the Java heap. More specifically, direct buffers have the following properties: 
 once allocated, their memory address is fixed for the lifetime of the buffer; 
 because their address is fixed, the kernel can safely access them directly and hence direct buffers can be used more efficiently in I/O operations; 
 in some cases, accessing them from Java can be more efficient (there's potentially less overhead in looking up the memory address and/or other housekeeping required before accessing a Java object)— see the example NIO buffer performance measurements made in Hotspot under Windows; 
 via the Java Native Interface, you can actually set the address arbitrarily if required (e.g. to access hardware at a particular address, or to perform the allocation yourself). 

In practice, in current versions of Hotspot, the memory is allocated via a malloc(), although this could vary in other VMs or in a future version of Hotspot.
Direct buffers
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
sith
Дата 5.11.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 11.2.2007

Репутация: нет
Всего: 1



поидеи это оно... типа с этим  ByteBuffer  можно складывать байт масивы в не хипа



--------------------
Там где ты ставишь глупые смайлики, я вбиваю восклицания знаки!!!
PM MAIL   Вверх
Stolzen
Дата 7.11.2011, 06:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



А как память чистить? Или все утекать будет? Вообще да, занятная штука.


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Skipy
Дата 7.11.2011, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Память собирается точно так же, как и обычная. В смысле, собирается объект типа ByteBuffer, и при этом в нем происходит сбор памяти. 

На самом деле там достаточно прозрачно всё сделано - память выделяется через Unsafe прямо в java-коде, создается обработчик, ее собирающий, и всё это кладется через PhantomReference в очередь. При сборке запускается обработчик и собирает память. Весь этот код доступен в исходниках по лицензии JRL, да и обычного src.zip хватит, чтобы разобраться, правда, без деталей.

Так что если грамотно всё организовать и не прикапывать жесткие ссылки - всё соберется. В Wicket 1.3.4 была такая утечка, потом поправили. 

Вообще держать данные вне хипа - плохая практика. Эта память собирается сильно сложнее и дольше, а необходимость вылезти за хип чаще всего говорит о том, что в приложении проблемы. За хипом память тоже не беспредельная. Предназначение прямого выделения - операции ввода-вывода. Выделенные в ОС буферы памяти могут сильно ускорить обмен с устройствами, ибо ОС будет с ними работать напрямую. А потом и нам можно напрямую, что тоже быстро.

Это сообщение отредактировал(а) Skipy - 7.11.2011, 12:21


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
Galaran
Дата 7.11.2011, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 25.5.2009

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



Интересная статья на хабре на эту тему
Там ещё внизу поста есть ссылка на блог автора, тоже посоветую глянуть
PM MAIL   Вверх
COVD
Дата 8.11.2011, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

необходимость вылезти за хип чаще всего говорит о том, что в приложении проблемы

 smile 


Из "Интересная статья на хабре на эту тему":
Цитата

Еще один очень популярный прием уменьшения пауз GC это разбиение вашего приложения на несколько частей, которые будут запускаться в разных JVM. Большинство в данный момент и идут по этой дороге. Это, действительно, хорошее решение, если ваша система слабо связанна и хорошо делится логически. Но любое распределение так или иначе значительно усложняет вашу архитектуру и замедляет взаимодействие, так что оно подойдет не для любого приложения.

Не подойдет для клиентского приложения. А для серверной системы в том, наверное, и состоит искусство разработчика, чтобы система получилась "слабо связанна" и "хорошо делилась логически". 


Это сообщение отредактировал(а) COVD - 8.11.2011, 03:32
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.0890 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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