|
|
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Часто люди любят ругаться такими словами. Дайте что-нить почитать, чтоб просветиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2014, 01:21 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2014, 06:17 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
bulle_anОставшиеся после работы Garbage Collector объекты перемещаются из поколения Youth в Tenured , а затем в Permanent .Откуда вы это взяли? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2014, 11:02 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
DEVcoach bulle_anОставшиеся после работы Garbage Collector объекты перемещаются из поколения Youth в Tenured, а затем в Permanent. Откуда вы это взяли? :-) DEVcoach, Согласен, все это сильное упрощение, которое может быть не совсем точным. Единственно верный ответ вы найдете в исходниках OpenJDK . Небольшая ремарка - в Permanent Generation располагаются те данные, на которые ссылаются в протяжении всего времени работы приложения. Те классы, которые загружены базовым загрузчиком, загрузчиком расширений и системным. Определения всех классов приложения, в том числе и классов самой JVM - имена классов, информация о пуле констант, массивы объектов и массивы типов, ассоциированных с классом, внутренние объекты, создаваемые JVM , информация используемая для оптимизации. Статические члены, код методов (статических и не статических). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2014, 13:28 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
bulle_anСогласен, все это сильное упрощение, которое может быть не совсем точным. И не только "не совсем точным", но и наглухо не верным. PermGen служит другим задачам, а не подбирает объекты после Tenured. bulle_anЕдинственно верный ответ вы найдете в исходниках OpenJDK Это тоже в корне не верно. Поведение GC в Oracle JVM достаточно не плохо документировано. При чем тут OpenJDK, не совсем понятно. bulle_anНебольшая ремарка - в Permanent Generation располагаются те данные, на которые ссылаются в протяжении всего времени работы приложения. Смотря что называть "приложением". В любом случае это заблуждение. Классы их PermGen можно выгружать. bulle_anТе классы, которые загружены базовым загрузчиком, загрузчиком расширений и системным. Определения всех классов приложения, в том числе и классов самой JVM - имена классов, информация о пуле констант, массивы объектов и массивы типов, ассоциированных с классом, внутренние объекты, создаваемые JVM , информация используемая для оптимизации. Статические члены, код методов (статических и не статических). Слишком много своих домыслов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2014, 16:14 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
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 они появятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2014, 16:33 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczbulle_anСогласен, все это сильное упрощение, которое может быть не совсем точным. И не только "не совсем точным", но и наглухо не верным. PermGen служит другим задачам, а не подбирает объекты после Tenured. bulle_anЕдинственно верный ответ вы найдете в исходниках OpenJDK Это тоже в корне не верно. Поведение GC в Oracle JVM достаточно не плохо документировано. При чем тут OpenJDK, не совсем понятно. bulle_anНебольшая ремарка - в Permanent Generation располагаются те данные, на которые ссылаются в протяжении всего времени работы приложения. Смотря что называть "приложением". В любом случае это заблуждение. Классы их PermGen можно выгружать. bulle_anТе классы, которые загружены базовым загрузчиком, загрузчиком расширений и системным. Определения всех классов приложения, в том числе и классов самой JVM - имена классов, информация о пуле констант, массивы объектов и массивы типов, ассоциированных с классом, внутренние объекты, создаваемые JVM , информация используемая для оптимизации. Статические члены, код методов (статических и не статических). Слишком много своих домыслов. Спасибо за информацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.06.2014, 17:26 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, авторHeap она же "куча" это способ управлять памятью. Тривиальный способ работы с объектами в С++, например, - выделить память, записать туда состояние объекта. После использования вызвать деструктор и освободить память. Этот подход является очень медленным. Резервировать и освобождать память на каждый объект отдельно - очень затратно для большого числа объектов. Поэтому альтернативным подходом является "куча". В C++ тоже есть куча. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 14:20 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪВ C++ тоже есть куча. Я где-то утверждал что её там нет? В С++, помимо тривиального, доступны разные способы управления памятью для объектов. В том числе и "куча". А что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 14:26 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПоэтому альтернативным подходом является "куча". Это зарезервированная под объекты область памяти процесса, которая управляется каким-то отдельным под-процессом. Всю жизнь под кучей (heap) понимал кусок памяти в котором в произвольном порядке находятся (могут находиться) разнородные объекты. Когда успело смениться определение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 14:32 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевBlazkowiczПоэтому альтернативным подходом является "куча". Это зарезервированная под объекты область памяти процесса, которая управляется каким-то отдельным под-процессом. Всю жизнь под кучей (heap) понимал кусок памяти в котором в произвольном порядке находятся (могут находиться) разнородные объекты. Когда успело смениться определение? Оно точно так же притянуто за уши как и ваше и на документальность не претендует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 14:37 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Я в том смысле, что способ хранения куча, стек, область программы и т.п. - вещи перпендикулярные необходимости выделять память и ее освобождать. Меняется только способ реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 14:43 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевЯ в том смысле, что способ хранения куча, стек, область программы и т.п. - вещи перпендикулярные необходимости выделять память и ее освобождать. Меняется только способ реализации. Вы как-то не так интерпретировали мой коментарий и сами исправляете свою интерпретацию. Я нигде не писал что куча отменяет надобность выделять память. Есть тривиальный способ выделения памяти перед созданием объекта. И освобождением её после использования объекта. А есть куча - выделение некоторой области памяти заранее под будущие объекты. По-моему это логично и очевидно. Почему вдруг вы решили что наличие кучи вдруг как-то отменяет выделение памяти, мне не понятно. Если с каким-то конкретным тезисом не согласны, так хотя бы цитировали его. Потому что в этой цитате авторПоэтому альтернативным подходом является "куча". Это зарезервированная под объекты область памяти процесса, которая управляется каким-то отдельным под-процессом. Я как-то ошибок не наблюдаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 14:52 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Этот подход является очень медленным. Резервировать и освобождать память на каждый объект отдельно - очень затратно для большого числа объектов. Поэтому альтернативным подходом является "куча". Это чьи слова? Правильнее IMHO алтернативным подходом является куча, которая управляется каким-то отдельным под-процессом , если брать Ваши слова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 15:31 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевBlazkowicz Этот подход является очень медленным. Резервировать и освобождать память на каждый объект отдельно - очень затратно для большого числа объектов. Поэтому альтернативным подходом является "куча". Это чьи слова? Ошибка в чем? Сергей Арсеньев Правильнее IMHO алтернативным подходом является куча, которая управляется каким-то отдельным под-процессом , если брать Ваши слова. М-да. Проехали. Мне вас не понять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 15:45 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczОшибка в чем? Куча способ расположения данных в памяти, он не может противопоставляться способу выделения/освобожения места в памяти (в той же куче). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 16:38 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
PermGen ныне модно называть Metaspace. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2014, 10:49 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, начиная с java 8 - PermGen исчез :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2014, 13:54 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Atum1, нет - его переименовали и ввели другие умолчания. :) И да - теперь он может уменьшаться. А главное преимущество Metadata space это - Enable future improvements that were limited by PermGen. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2014, 18:31 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, главное что утечки класслоудеров теперь спрятали :) раньше текли в ограниченном объеме ,который и назывался Permanent Generation, а теперь текут в хипе , где памяти больше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 09:21 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Atum1раньше текли в ограниченном объеме ,который и назывался Permanent Generation, а теперь текут в хипе , где памяти больше :) Нет. Не в хипе, а в metaspace, который вне хипа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 09:26 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
Прочитал статью: 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 Но ничего не написано по предназначение кадждого из сборщиков мусора. Подразумевается, что каждый из них придуман для своей корневой точки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:37 |
|
||
|
хип, пермген, стек. Что это ?
|
|||
|---|---|---|---|
|
#18+
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 и является самым "производительным". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2014, 11:49 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38665422&tid=2126409]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 454ms |

| 0 / 0 |
