powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / хип, пермген, стек. Что это ?
25 сообщений из 47, страница 1 из 2
хип, пермген, стек. Что это ?
    #38664525
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Часто люди любят ругаться такими словами. Дайте что-нить почитать, чтоб просветиться.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38664557
bulle_an
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90,

Heap - динамически распредляемая область памяти, создаваемая при старте JVM .

Garbage Collector , использующий алгоритм на основе поколений, делит динамически распредляемую память на три - Youth Generation , Tenured Generation , Permanent Generation . Youth Generation делится на Eden Generation две области Survivor Generation . Permanent Generation ( Metaspace в Java 8 ) - соответственно, одна из областей динамически распредляемой памяти, содержащая неудаляемые данные, например, метаданные о создаваемых объектах ( "перманентный" - продолжающийся непрерывно; постоянный). Оставшиеся после работы Garbage Collector объекты перемещаются из поколения Youth в Tenured , а затем в Permanent .

Стек хранит ссылки на объекты, расположен в RAM и доступен процессору через указатель стека.

Почитать можно следующие книги, например:

http://www.amazon.com/Java-Performance-Definitive-Scott-Oaks/dp/1449358454/ref=sr_1_1?s=books&ie=UTF8&qid=1402192373&sr=1-1&keywords=Garbage+Collection+JVM]" Java Performance: The Definitive Guide" by Scott Oaks
http://www.amazon.com/Java-Performance-Charlie-Hunt/dp/0137142528/ref=sr_1_2?s=books&ie=UTF8&qid=1402192373&sr=1-2&keywords=Garbage+Collection+JVM] Java Performance by Charlie Hunt, Binu John
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38664582
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bulle_anОставшиеся после работы Garbage Collector объекты перемещаются из поколения Youth в Tenured , а затем в Permanent .Откуда вы это взяли? :-)
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38664606
bulle_an
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DEVcoach bulle_anОставшиеся после работы Garbage Collector объекты перемещаются из поколения Youth в Tenured, а затем в Permanent.
Откуда вы это взяли? :-) DEVcoach,

Согласен, все это сильное упрощение, которое может быть не совсем точным. Единственно верный ответ вы найдете в исходниках OpenJDK .

Небольшая ремарка - в Permanent Generation располагаются те данные, на которые ссылаются в протяжении всего времени работы приложения. Те классы, которые загружены базовым загрузчиком, загрузчиком расширений и системным. Определения всех классов приложения, в том числе и классов самой JVM - имена классов, информация о пуле констант, массивы объектов и массивы типов, ассоциированных с классом, внутренние объекты, создаваемые JVM , информация используемая для оптимизации. Статические члены, код методов (статических и не статических).
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38664657
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bulle_anСогласен, все это сильное упрощение, которое может быть не совсем точным.

И не только "не совсем точным", но и наглухо не верным. PermGen служит другим задачам, а не подбирает объекты после Tenured.

bulle_anЕдинственно верный ответ вы найдете в исходниках OpenJDK

Это тоже в корне не верно. Поведение GC в Oracle JVM достаточно не плохо документировано. При чем тут OpenJDK, не совсем понятно.

bulle_anНебольшая ремарка - в Permanent Generation располагаются те данные, на которые ссылаются в протяжении всего времени работы приложения.
Смотря что называть "приложением". В любом случае это заблуждение. Классы их PermGen можно выгружать.

bulle_anТе классы, которые загружены базовым загрузчиком, загрузчиком расширений и системным. Определения всех классов приложения, в том числе и классов самой JVM - имена классов, информация о пуле констант, массивы объектов и массивы типов, ассоциированных с классом, внутренние объекты, создаваемые JVM , информация используемая для оптимизации. Статические члены, код методов (статических и не статических).
Слишком много своих домыслов.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38664661
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Часто люди любят ругаться такими словами. Дайте что-нить почитать, чтоб просветиться.
http://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf
Вот подборка отличных статей для Hotspot
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140228.html

Heap она же "куча" это способ управлять памятью. Тривиальный способ работы с объектами в С++, например, - выделить память, записать туда состояние объекта. После использования вызвать деструктор и освободить память. Этот подход является очень медленным. Резервировать и освобождать память на каждый объект отдельно - очень затратно для большого числа объектов.
Поэтому альтернативным подходом является "куча". Это зарезервированная под объекты область памяти процесса, которая управляется каким-то отдельным под-процессом. В случае Java это JVM и её GC. С одной стороны по памяти накладно резервировать сразу большое количество. Зато это даёт хороший прирост производительности. Удаление объектов, например, не стоит почти ничего.

PermGen - особая область кучи, для хранение объектов, которые вряд ли придется удалять. К таким объектам относятся классы, загрузчики и пул строковых констант.

Стек - это такая структура данных ( http://en.wikipedia.org/wiki/LIFO_(computing)). Последний кто попадёт в стек выйдет из него перым. Через стек организована работа процедурных языков. Каждая процедура имеет свои переменные, и вызывает другие процедуры. Переменные, которые принадлежат процедурам, хранятся в стеке. То есть, для того чтобы вызвать другую процедуру, нужно где-то сохранить свои переменные, вызвать под-процедуру, а по выходу из неё как-то восстановить состояние. Так как вызовы под-процедур могут иметь большую вложенность, то очень удобно хранить состояние каждой под-процедуры в стеке. А при выходе из процедуры, восстанавливать переменные из стэка.

Java в стеке хранит только локальные переменные. За что её часто критикуют. C#, например, изначально позволяет хранить на стеке структуры данных. Недавно прошла инфа о том что возможность добавления структур в Java изучается. И есть шанс что в Java 9 они появятся.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38664672
bulle_an
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczbulle_anСогласен, все это сильное упрощение, которое может быть не совсем точным.

И не только "не совсем точным", но и наглухо не верным. PermGen служит другим задачам, а не подбирает объекты после Tenured.

bulle_anЕдинственно верный ответ вы найдете в исходниках OpenJDK
Это тоже в корне не верно. Поведение GC в Oracle JVM достаточно не плохо документировано. При чем тут OpenJDK, не совсем понятно.
bulle_anНебольшая ремарка - в Permanent Generation располагаются те данные, на которые ссылаются в протяжении всего времени работы приложения.
Смотря что называть "приложением". В любом случае это заблуждение. Классы их PermGen можно выгружать.
bulle_anТе классы, которые загружены базовым загрузчиком, загрузчиком расширений и системным. Определения всех классов приложения, в том числе и классов самой JVM - имена классов, информация о пуле констант, массивы объектов и массивы типов, ассоциированных с классом, внутренние объекты, создаваемые JVM , информация используемая для оптимизации. Статические члены, код методов (статических и не статических).
Слишком много своих домыслов.

Спасибо за информацию.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38665337
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
авторHeap она же "куча" это способ управлять памятью. Тривиальный способ работы с объектами в С++, например, - выделить память, записать туда состояние объекта. После использования вызвать деструктор и освободить память. Этот подход является очень медленным. Резервировать и освобождать память на каждый объект отдельно - очень затратно для большого числа объектов.
Поэтому альтернативным подходом является "куча".
В C++ тоже есть куча.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38665345
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪВ C++ тоже есть куча.
Я где-то утверждал что её там нет? В С++, помимо тривиального, доступны разные способы управления памятью для объектов. В том числе и "куча". А что?
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38665353
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПоэтому альтернативным подходом является "куча". Это зарезервированная под объекты область памяти процесса, которая управляется каким-то отдельным под-процессом.
Всю жизнь под кучей (heap) понимал кусок памяти в котором в произвольном порядке находятся (могут находиться) разнородные объекты. Когда успело смениться определение?
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38665359
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевBlazkowiczПоэтому альтернативным подходом является "куча". Это зарезервированная под объекты область памяти процесса, которая управляется каким-то отдельным под-процессом.
Всю жизнь под кучей (heap) понимал кусок памяти в котором в произвольном порядке находятся (могут находиться) разнородные объекты. Когда успело смениться определение?
Оно точно так же притянуто за уши как и ваше и на документальность не претендует.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38665363
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Я в том смысле, что способ хранения куча, стек, область программы и т.п. - вещи перпендикулярные необходимости выделять память и ее освобождать. Меняется только способ реализации.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38665372
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевЯ в том смысле, что способ хранения куча, стек, область программы и т.п. - вещи перпендикулярные необходимости выделять память и ее освобождать. Меняется только способ реализации.
Вы как-то не так интерпретировали мой коментарий и сами исправляете свою интерпретацию. Я нигде не писал что куча отменяет надобность выделять память.
Есть тривиальный способ выделения памяти перед созданием объекта. И освобождением её после использования объекта. А есть куча - выделение некоторой области памяти заранее под будущие объекты. По-моему это логично и очевидно. Почему вдруг вы решили что наличие кучи вдруг как-то отменяет выделение памяти, мне не понятно. Если с каким-то конкретным тезисом не согласны, так хотя бы цитировали его. Потому что в этой цитате

авторПоэтому альтернативным подходом является "куча". Это зарезервированная под объекты область памяти процесса, которая управляется каким-то отдельным под-процессом.
Я как-то ошибок не наблюдаю.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38665410
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz Этот подход является очень медленным. Резервировать и освобождать память на каждый объект отдельно - очень затратно для большого числа объектов.
Поэтому альтернативным подходом является "куча".
Это чьи слова?

Правильнее IMHO алтернативным подходом является куча, которая управляется каким-то отдельным под-процессом , если брать Ваши слова.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38665422
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевBlazkowicz Этот подход является очень медленным. Резервировать и освобождать память на каждый объект отдельно - очень затратно для большого числа объектов.
Поэтому альтернативным подходом является "куча".
Это чьи слова?
Ошибка в чем?

Сергей Арсеньев Правильнее IMHO алтернативным подходом является куча, которая управляется каким-то отдельным под-процессом , если брать Ваши слова.
М-да. Проехали. Мне вас не понять.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38665497
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczОшибка в чем?
Куча способ расположения данных в памяти, он не может противопоставляться способу выделения/освобожения места в памяти (в той же куче).
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38665795
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38666033
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

http://habrahabr.ru/post/112676/

тут с картинками :)
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38666043
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PermGen ныне модно называть Metaspace.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38666333
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

начиная с java 8 - PermGen исчез :)
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38666771
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,

нет - его переименовали и ввели другие умолчания. :)
И да - теперь он может уменьшаться.
А главное преимущество Metadata space это - Enable future improvements that were limited by PermGen.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38667122
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

главное что утечки класслоудеров теперь спрятали :) раньше текли в ограниченном объеме ,который и назывался Permanent Generation, а теперь текут в хипе , где памяти больше :)
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38667127
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1раньше текли в ограниченном объеме ,который и назывался Permanent Generation, а теперь текут в хипе , где памяти больше :)
Нет. Не в хипе, а в metaspace, который вне хипа.
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38781590
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прочитал статью: http://ggenikus.github.io/blog/2014/05/04/gc/

На вопрос как GC обнаруживате мусор ответ такой?

Там написано,что JVM использует Tracing подход для очистки памяти. И есть 4 корневых точки:

http://ggenikus.github.io/blog/2014/05/04/gc/ Локальные переменные и параметры методов
Java Потоки
Статические переменные
Ссылки из JNI

Как GC очищает память от мусора?

http://ggenikus.github.io/blog/2014/05/04/gc/ Сборщики мусора HotSpot VM используют подход “Generational Garbage Collection”
...
В HotSpot VM реализовано четыре сборщика мусора основанных на идее “Generational Garbage Collection”:
Serial GC
Parallel GC
CMS GC
G1 GC

Но ничего не написано по предназначение кадждого из сборщиков мусора.

Подразумевается, что каждый из них придуман для своей корневой точки?
...
Рейтинг: 0 / 0
хип, пермген, стек. Что это ?
    #38781609
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Но ничего не написано по предназначение кадждого из сборщиков мусора.
Подразумевается, что каждый из них придуман для своей корневой точки?
Нет. Это разные алгоритмы, каждый со своими плюсами и минусами.
https://blogs.oracle.com/jonthecollector/entry/our_collectors
Serial - самый старый способ сборки мусора. Он однопоточный. Его проблема в огромных паузах, когда JVM останавливает все свои потоки для сборки мусора. При этом он является самым высокопроизводительным. Не плохо подходит для задач массовой обработки.
Длинные паузы (stop-the-world) в JVM это большая проблема как для GUI, так и для серверных приложений. Поэтому следующим шагом стала разработка алгоритмов для уменьшения этих пауз.
Parallel - это тот же алгоритм что и Serial, но оптимизированый для многопоточного выполнения - больше потоков работает - короче пауза.
CMS - это более новый алгоритм, который позволяет свести паузы к минимуму или даже избавится от них в определенных условиях.
Основная проблема CMS и остальных алгоритмов в том что они сканируют все живые объекты. И это становится нереально тяжелым процессом, когда живых объектов в JVM 4Гб и более.
Поэтому был разработан новый алогоритм G1 - который сегментирует кучу и позволяет делать сборку в отдельных сегментах. Тем самым влияние размера кучи и количество живых объектов на паузы уменьшает.

Каждый же новый алгоритм GC является более сложным, что приводит к дополнительному уменьшению производительности. Поэтому-то serial и является самым "производительным".
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / хип, пермген, стек. Что это ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]