|
|
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Добрый день, уважаемые дамы и господа. Пытаюсь мониторить использование памяти в Java SE7 при помощи MXBean. код - Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Вроде выдает корректные данные по heap и PermGen (сравнивал с jconsole). Вопрос - можно ли верить этим данным? Еще вопрос - как программно получить инфу об использовании Stack (размер задается ключом -Xss) ? Заранее спасибо. До свидания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 16:56 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикВопрос - можно ли верить этим данным?... Верить никому нельзя. Особенно если у Вас на компьютере процессор Intel, там даже в Pentium'ах бага была. ))) МурзикЕще вопрос - как программно получить инфу об использовании Stack (размер задается ключом -Xss) ? Зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 17:04 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикВроде выдает корректные данные по heap и PermGen (сравнивал с jconsole). Вопрос - можно ли верить этим данным? Еще вопрос - как программно получить инфу об использовании Stack (размер задается ключом -Xss) ? Вопрос веры/неверы это какой-то сугубо личный вопрос. Можчно качнуть исходники MemoryMXBean и просто посмотреть откуда он их получает. И дальше будет совсем другая формулировка. Какой смысл Oracle/Sun вкладывает в эти счётчики и есть-ли им реальная подоплёка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 17:12 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Так как верить никому нельзя, я хочу проверить, где создаются переменные: 1. Примитивные 2. Строки 3. Статические переменные 4. Переменные уровня экземпляра при задании какого-то хитрого ХХ-ключа JVM. также мне интересно, освобождает ли GC область памяти PermGen. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 17:53 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикТак как верить никому нельзя, я хочу проверить, где создаются переменные: 1. Примитивные 2. Строки 3. Статические переменные 4. Переменные уровня экземпляра при задании какого-то хитрого ХХ-ключа JVM. также мне интересно, освобождает ли GC область памяти PermGen. 1. Локальные переменные создаются на стеке. Не важно примитивы или ссылка на объект. 2. Строки это объекты. Живут в куче как все либо в пуле строк. Пул живет в PermGen или MetaSpace. 3. Статические переменные это поля объекта-класса. Они живут в куче, как и сам класс. Скорее всего в PermGen/MetaSpace. 4. Какого такого хитрого ключа? 5. PermGen освобождается. Это и много другое можно смотреть в профайлерах (например VisualVM) или инструментах разработки - jstat, jconsole, mission control ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 18:05 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Мурзик...я хочу проверить, где создаются переменные... 1. Документации от вендора Вы тоже не верите? 2. Каким образом Ваш вопрос соотносится с данной задачей? Мурзиктакже мне интересно, освобождает ли GC область памяти PermGen Статистику по PermGen получить вроде элементарно. По стеку, не факт, что на уровне Java это возможно. По хорошему стек нужно смотреть на уровне OS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 18:13 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Здесь пишут http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html -Xssn Sets the thread stack size. XX:FlightRecorderOptions =parameter=value stackdepth=depth Stack depth for stack traces by JFR. By default, the depth is set to 64 method calls. The maximum is 2048, minimum is 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 18:29 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Ну "не все так однозначно" ( C ) дочь офицера Вроде stack size распространяется и на native потоки. Т.ч. в общем виде "получить инфу об использовании Stack" вроде задача не совсем тривиальная. Но зачем это надо практически - понять сложно + у меня какой-то шумок в голове, что никто не обещал, что java thread будет однозначно соответствовать os thread. Хотя, похоже, в последних версиях Java это именно так. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 18:34 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
stackdepth - совсем другое. Плюс, FR - коммерческая фишка и для его легального использования требуется прикупить соответствующую лицензию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 18:34 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Допустим у нас есть рекурсивная функция которая обходит сайты, файловую систему или древовидную DBMS. Какие числовые оценки можно делать для стека? И зачем? Какие выводы можно делать? Что стека не хватит? Почему софт так написан? Может использовать template преобразования рекурсии в FSM+Queue(Collection) ? Может ограничить глубину рекурсии парамертром maxDepth в аргументах и использовать проверку? Вообще что даёт сама метрика? Что софт плохой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 19:07 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
mayton...Какие числовые оценки можно делать для стека?... Ну я бы рекомендовал написать тест. Посмотреть когда упадет (на каком уровне вложенности). Поделил одно на другое и сделал бы оценку. IMHO & AFAIK: 1) А вообще рекурсия это зло. В том числе и по данной причине. Сложно контролировать выделение ресурсов. 2) Если heap можно достаточно безболезненно задирать, то задирать стек, из-за того, что ОДНА функция в системе сделана через рекурсию и ей категорически не хватает стека.... это попахивает бредом.... Проще и лучше дать пинка программисту и развернуть с цикл и/или ручной стек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 19:16 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Развёртывание стека - это хардкор. Тяжёлая артиллерия. В 99% ее никто не будет делать. Будут искать компромиссное решение. Крутить настройки сервера. Бить задачу на порции как хадупах или форк-джойнить и запускать в разных нодах/серверах. Готов поспорить что так и будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 19:25 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Остаётся только вопрос - задлянафига автору вообще знать размер стека. И, не исключено, выяснится, что ищет он не там, где потерял, а там, где светло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2014, 21:34 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Добрый день. Ключ именуется: -XX:+DoEscapeAnalysis Прочитал про него здесь: http://www.javaspecialist.ru/2011/04/java-thread-stack.html Зачем начал интересоваться распределением памяти в JAVA: Прослушав курсы тов. Мирончика в Киеве, узнал, что есть такие разделы памяти: -- +статический контекст -сюда загружаются java-классы со своей структурой, из которых потом будут создаваться экземпляры, тут же хранятся переменные уровня класса (которые static) +стек — тут выполняются инструкции описанные в методах и тут же примитивные переменные +heap — хранятся переменные уровня экземпляра для объектов +garbage collection — сюда сваливаются уже ненужные переменные из heap --- (день 1, файл capture_5.avi, время 01:00:44) Маленькая реклама: сделал хронометраж его курса и поместил его сюда - http://www.programtask.ru/archives/80 Так вот: Нигде больше я не нашел инфу про область памяти garbage collection, посему начал разбираться что и как. Что узнал: +Статический контекст в оригинале называется PermGen +Стек - это ThreadStack +heap - состоит из нескольких частей. Касательно стека - создал класс с ОЧЧЧень большим кол-вом примитивных переменных: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Запускаю так - java -Xss64K TestPrimitive Получаю - Exception in thread "main" java.lang.StackOverflowError at TestPrimitive.main(TestPrimitive.java:8) Если так - java -Xss72K TestPrimitive То все Ок: RUN 15477216 15477216 Вроде все объяснимо - 8000 double-переменных занимают 64K памяти. Что интересно, а если эти переменные поместить в другом методе (не main), создать экземпляр этого класса и выполнить этот метод, то как долго эти переменные будут занимать место в stack? Для этого мне и требовался инстрУмент для программного измерения заполненности ThreadStack. Задавался вопрос - почему я не верю документации от вендора. Ответ такой: Был я как-то на московской конференции Тома Кайта и он сказал, что надо верить только тому, что прошло через ваши руки здесь и сейчас. Может что-то измениться - например, выйдет новый релиз, в котором будет изменено именно ЭТО. Дока писалась для определенной версии java - после этого вышло около 60-ти релизов (версия 1.7.60). Именно поэтому я очень люблю проверять то, что написано - на заборе вот тоже много чего написано, а за забором - дрова :) Такие вот мысли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 10:40 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикКлюч именуется: -XX:+DoEscapeAnalysis -- +статический контекст -сюда загружаются java-классы со своей структурой, из которых потом будут создаваться экземпляры, тут же хранятся переменные уровня класса (которые static) +стек — тут выполняются инструкции описанные в методах и тут же примитивные переменные +heap — хранятся переменные уровня экземпляра для объектов +garbage collection — сюда сваливаются уже ненужные переменные из heap --- С такой терминологией разбираться в Escape Analysis, по-моему рано. Потому что терминология не точная и показывает полное непонимание происходящего. МурзикНигде больше я не нашел инфу про область памяти garbage collection, посему начал разбираться что и как. Нет такой "области памяти". Есть "куча", у неё есть "поколения". Есть ещё нативная памяти процесса вне кучи (off heap). Мурзик+Статический контекст в оригинале называется PermGen А если идти в ногу со временем, то Metaspace. Мурзик+Стек - это ThreadStack "Стек" это "стек". Точный и понятный термин. Даже если не указывать Thread, то спутать с коллекцией java.util.Stack довольно сложно. Мурзик+heap - состоит из нескольких частей. Обычно "поколений". Но фрагментация кучи может быть разной в зависимости от реализации сборщика мусора. МурзикЧто интересно, а если эти переменные поместить в другом методе (не main), создать экземпляр этого класса и выполнить этот метод, то как долго эти переменные будут занимать место в stack? Какая разница, выполняется метод экземпляра или статический? Ведь локальные переменные все равно живут на стеке. Тут опять же в вашей терминологии, сложно сориентироваться. Что значит "занимать". Фрейм завершается и на месте старых переменных можно писать новые. Но вот вопрос, когда область памяти заполнена данными, но ещё не перезаписано это "переменная занимает память" или нет? МурзикДля этого мне и требовался инстрУмент для программного измерения заполненности ThreadStack. Ну, так инструмент надо было искать, а не самому писать на pure Java. МурзикЗадавался вопрос - почему я не верю документации от вендора. Ответ такой: Был я как-то на московской конференции Тома Кайта и он сказал, что надо верить только тому, что прошло через ваши руки здесь и сейчас. Может что-то измениться - например, выйдет новый релиз, в котором будет изменено именно ЭТО. Дока писалась для определенной версии java - после этого вышло около 60-ти релизов (версия 1.7.60). Именно поэтому я очень люблю проверять то, что написано - на заборе вот тоже много чего написано, а за забором - дрова :) Такие вот мысли. Возможно вам интересно. Это хорошо что вы продолжаете в этом направлении копаться. Но на самом деле пользы для вас от этого будет мало. Лучше бы разобраться с терминологией сначала, и понять что как работает вообще, а потом уже разбираться в деталях. Ну, и если очень интересны детали, то по-моему проще всего скачать OpenJDK и смотреть как реализован стэк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 11:01 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикЗадавался вопрос - почему я не верю документации от вендора. Ответ такой: Был я как-то на московской конференции Тома Кайта и он сказал, что надо верить только тому, что прошло через ваши руки здесь и сейчас. Может что-то измениться - например, выйдет новый релиз, в котором будет изменено именно ЭТОИменно поэтому существует тестирование обновлений. По логике, об этом дядюшка Кайт должен был (тоже) сказать.Дока писалась для определенной версии java - после этого вышло около 60-ти релизов (версия 1.7.60)Вы уже демонстрируете издержки не чтения документации: начиная с u25 нумерация идёт "через пять". Документация, кстати, тоже обновляется.Именно поэтому я очень люблю проверять то, что написано - на заборе вот тоже много чего написано, а за забором - дрова :) Такие вот мысли.Документация отличается от забора в одном важном отношении: только вдумчивое чтение позволяет формулировать правильные вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 11:21 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Читаем доку: http://docs.oracle.com/javase/specs/jls/se7/html/index.html Обратите внимание на дату - 2013-02-28 Я правильно понимаю, что с тех пор java изменялась отдельно от доки? Все, что нашел в доке про память: http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4 Memory that can be shared between threads is called shared memory or heap memory. All instance fields, static fields, and array elements are stored in heap memory. In this chapter, we use the term variable to refer to both fields and array elements. На странице https://search.oracle.com/search/search?search.timezone=-240&search_startnum=&search_endnum=&num=10&search_dupid=&exttimeout=false&actProfId=0&q=heap url:/javase/7/docs/api&group=Documentation&sw=t&search_p_main_operator=all&search_p_atname=&adn=&search_p_op=equals&search_p_val=&search_p_atname=&adn=&search_p_op=equals&search_p_val= искал heap url:/javase/7/docs/api там же искал memory model Нигде не увидел описания использования памяти java. Возможно, я не владею технологией поиска или ищу там, где светло (или куда указывает yandex.ru по словам java 7 memory model) - помогите пож-ста найти там, где темно. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 15:02 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикЧитаем доку: http://docs.oracle.com/javase/specs/jls/se7/html/index.html Обратите внимание на дату - 2013-02-28 Я правильно понимаю, что с тех пор java изменялась отдельно от доки? Java может изменятся в соответствии с графиком выхода критических патчей. А документ который входит в релиз может вполне датироваться датой релиза. Это нормально. Твой самый первый вопрос касался Java SE7 ? Верно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 15:22 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
А спецификация SMTP определена в RFC-821 от, страшно подумать, 1982 года. Как же у нас почта до сих пор ходит??? P.S. Слово спецификация выделено совершенно не случайно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 15:23 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикЧитаем доку: http://docs.oracle.com/javase/specs/jls/se7/html/index.html Это не единственная дока. Есть например ещё такая: http://docs.oracle.com/javase/specs/jvms/se7/html/ Но это только спецификации на язык и виртуальную машину. Реализация спецификаций может содержать свои алгоритмы и структуры. Главное чтобы они не перечили спецификации. Мурзик Обратите внимание на дату - 2013-02-28 Я правильно понимаю, что с тех пор java изменялась отдельно от доки? Вы уделяете внимание каким-то совершенно не важным мелочам. Почему надо обращать внимание на дату? JLS это не полное описание работы всего и вся. Это спецификация на то как должна работать система. Изменяется она не часто. Разве что вносятся небольшие правки. Это совершенно не значит что в реализации ничего не меняется. МурзикВсе, что нашел в доке про память: http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4 Memory that can be shared between threads is called shared memory or heap memory. All instance fields, static fields, and array elements are stored in heap memory. In this chapter, we use the term variable to refer to both fields and array elements. Правильно. Что наводит нас на мысль, что JLS поможет не особо. Мурзик Возможно, я не владею технологией поиска или ищу там, где светло (или куда указывает yandex.ru по словам java 7 memory model) - помогите пож-ста найти там, где темно. Заранее спасибо. Вы не владеете терминами. И это первое с чем стоит ознакомится. Memory model: http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4 Это вообще не о том: http://en.wikipedia.org/wiki/Java_Memory_Model ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 15:24 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Мурзик, Какая конкретно задача? Посмотреть как утроет стек потока в Hotspot? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 15:26 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
О! Открыл для себя интересную фичу. VisualVM -> Heap Dump -> Summary -> Threads at the heap dump -> Show Threads Показывает дамп потоков с локальными переменными. По-моему только теми, которые на кучу ссылаются. Примитивов не наблюдаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 15:42 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Интересное продолжение - BlazkowiczВы не владеете терминами. И это первое с чем стоит ознакомится. Согласен. Я сюда и пришел, чтобы овладеть терминами. BlazkowiczMemory model: http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4 Это вообще не о том: http://en.wikipedia.org/wiki/Java_Memory_Model Если надо смотреть на то, что "о том", то туда меня перенаправил yandex.ru - славим его :) На этой странице я попытался найти слово heap - 2 совпадения. Тут же слово perm находится тоже 2 раза. Получается крамольная весЧь - java скрывает структуру памяти. По крайней мере, в доке о поколениях или (составных частях) памяти heap не говорится. Буду рад ссылкам на оф. доку, где мои слова будут опровергнуты. Это по ОраклиНому - попытайтесь, например в доке по Oracle12c найти описание таблицы sys.ltxid_trans. А в TransactionGuard она очень хорошо используется :) Где же можно овладеть этими терминами, как не в первоисточнике? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 15:43 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикПо крайней мере, в доке о поколениях или (составных частях) памяти heap не говорится. Оно говорится в доках описывающих алгоритмы Garbage Collection Мало того, при разных алгоритмах GC, разделение памяти на поколения (или составные части) может меняться. AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 15:46 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Сведения о памяти не скрываются. Они изложены в спецификации. Детали реализации - в исходных текстах. И на это вам уже указывали. Проблема в том, что искомое вами никак не поможет ни в разработке, ни в отладке, ни в эксплуатации. Очень крутое и совершенно бесполезное знание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 15:48 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикНа этой странице я попытался найти слово heap - 2 совпадения. Тут же слово perm находится тоже 2 раза. Получается крамольная весЧь - java скрывает структуру памяти. По крайней мере, в доке о поколениях или (составных частях) памяти heap не говорится. Буду рад ссылкам на оф. доку, где мои слова будут опровергнуты. Это по ОраклиНому - попытайтесь, например в доке по Oracle12c найти описание таблицы sys.ltxid_trans. А в TransactionGuard она очень хорошо используется :) Где же можно овладеть этими терминами, как не в первоисточнике? Потому что работа GC она не покрывается спецификацией. GC у разных JVM может работать совершенно по-разному. И может даже вообще без GC. Тема большая. С наскока будет не просто: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 15:51 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Мурзик, И ещё полезных ссылок: http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136373.html http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140228.html Кстати, забудьте про yandex. Его зона доминирования заканчивается рунетом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 15:53 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПотому что работа GC она не покрывается спецификацией. GC у разных JVM может работать совершенно по-разному. И может даже вообще без GC. Тема большая. С наскока будет не просто: Получается, что структура памяти - все эти heap (и порожденный им PermGen)/stack у каждой JVM своя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 16:32 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикПолучается, что структура памяти - все эти heap (и порожденный им PermGen)/stack у каждой JVM своя? Да. Можно так сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 16:41 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за помощь, нашел доку http://www.oracle.com/technetwork/java/javase/tech/memorymanagement-whitepaper-1-150020.pdf, буду читать и думать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 17:12 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Не забудь посмотреть на дату этого документа :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 17:30 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Я смотрю, здесь пользуются jconsole и visualvm, а java mission center от jrockit кто-нибудь использует, в 8 и даже в последнем update 7 есть. Мне понравился, на eсlipse сделан, смущает только что профайлер надо использовать с аргументами -XX:+UnlockCommercialFeatures -XX:+FlightRecorder? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 17:37 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
maytonНе забудь посмотреть на дату этого документа :) Сразу же посмотрел - он времен Очаковских и... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 17:58 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
0FDсмущает только что профайлер надо использовать с аргументами -XX:+UnlockCommercialFeatures -XX:+FlightRecorder? Правильно смущает . Со второй колонки начинаются платные варианты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2014, 18:14 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Попутно возник еще один вопрос - может ли GarbageCollector, освобождая память heap, освободить память, занимаемую процессом ОС? В прилагаемом файле эта память обведена красной рамкой. Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 14:47 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикПопутно возник еще один вопрос - может ли GarbageCollector, освобождая память heap, освободить память, занимаемую процессом ОС? Мне кажется это не совсем задача GC. JVM может уменьшит размер кучи, если решит что она излишне велика для насущных задачь. Под Windows раньше была такая бага, что JVM не могла вернуть мапять в ОС. Актуальна ли она сейчас - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 14:53 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Актуальна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 14:54 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Ссылки по теме http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6498735 https://blogs.oracle.com/jonthecollector/entry/the_unspoken_the_why_of ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 14:57 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикАктуальна Пруфлинк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 15:01 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
BlazkowiczМурзикАктуальна Пруфлинк? Я не знаю, что такое Пруфлинк, посему решил почитать линки и попробовать. Пробовать буду на таком классе - public class TestHeapSize { double[] arrDouble; public TestHeapSize() { int intArrSize=1_000; this.arrDouble=new double[intArrSize]; } static void useMemory() { int maxLoop = (int) 1e4; TestHeapSize[] tstWork = new TestHeapSize[maxLoop]; for (int iLoop=0;iLoop<maxLoop;iLoop++) { tstWork[iLoop]=new TestHeapSize(); } } public static void main(String[] args) { System.out.println(Runtime.getRuntime().maxMemory()); System.out.println(Runtime.getRuntime().freeMemory()); System.out.println("wait 1"); try { Thread.sleep(10_000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } useMemory(); System.out.println(Runtime.getRuntime().maxMemory()); System.out.println(Runtime.getRuntime().freeMemory()); System.out.println("wait 2"); try { Thread.sleep(10_000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.gc(); System.out.println(Runtime.getRuntime().maxMemory()); System.out.println(Runtime.getRuntime().freeMemory()); try { Thread.sleep(10_000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } Буду запускать с различными МусороУборщиками (он же GC) и смотреть в TaskManager сколько он ест памяти. тестирую на такой 32-х разрядной jvm (java -version) java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode, sharing) Случай 1 - запускаю с родным GC: java -Xms1240k -Xmx512m TestHeapSize STDOUT: 518979584 971560 wait 1 518979584 26815192 wait 2 518979584 105411552 Память из диспетчера: wait 1 -> 4540 wait 2 -> 99168 Вывод - тут память не освобождается Запуск с ключом -XX:+UseG1GC stdOUT: 536870912 1740240 wait 1 536870912 17509704 wait 2 536870912 1852280 Память (из диспетчера): wait 1 -> 6796 wait 2 -> 109620 / 27592 Вывод - память освобождает Запуск с ключом -XX:+UseParallelGC stdOUT: 477364224 3584488 wait 1 477364224 21186312 wait 2 477364224 104031248 Память (из диспетчера): wait 1 -> 5516 wait 2 -> 119476 / 128496 Память не освобождается Запуск с ключом -XX:+UseParallelOldGC stdOUT: 477364224 3584488 wait 1 477364224 36059400 wait 2 477364224 117573768 Память (из диспетчера): wait1 5604 wait2 120404 / 123048 Заключение: Освобождает память (и то не всю только G1GC). Буду рад конструктивной критике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 15:59 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикБуду рад конструктивной критике. http://www.sql.ru/forum/rules.aspx Рекомендуется: Для повышения удобочитаемости сообщений - пользоваться специальными кодами для выделения слов (b, u, i, color) ( но не злоупотреблять ими ) и тегом форматирования исходных кодов src . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 16:04 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикЗапуск с ключом -XX:+UseParallelGC -XX:+UseAdaptiveSizePolicy ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 16:05 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикБуду рад конструктивной критике. Вот. То же самое. Но, какое оформление! http://www.stefankrause.net/wp/?p=14 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 16:07 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
BlazkowiczМурзикЗапуск с ключом -XX:+UseParallelGC -XX:+UseAdaptiveSizePolicy ? Бесполезняк - не чистит: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. С памятью из диспетчера: Код: plaintext 1. Постарался не перестараться с оформлениями - а то за синими деревьями не увидим леса, в который чем дальше, тем непонятнее. И хоть меняй ты мусороуборщика, хоть не меняй ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 16:40 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикБесполезняк - не чистит: А на линухе? МурзикПостарался не перестараться с оформлениями - а то за синими деревьями не увидим леса, в который чем дальше, тем непонятнее. И хоть меняй ты мусороуборщика, хоть не меняй ... Дорогой дневничок... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 16:43 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, а там в команде ps какой ключ надо указать, чтобы видеть память? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 17:02 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикЗаключение: Освобождает память (и то не всю только G1GC) Сейчас вот вспомнил как в сериале Симпсоны Нельсон бросает камень в белку и видит что ей больно. И пишет в своём исследовании - "Белки не любят камни". Вот как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 17:05 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
maytonМурзикЗаключение: Освобождает память (и то не всю только G1GC) Сейчас вот вспомнил как в сериале Симпсоны Нельсон бросает камень в белку и видит что ей больно. И пишет в своём исследовании - "Белки не любят камни". Вот как-то так. Я думаю - лучше так: Экспериментатор говорит мухе - лети, и она летит. Затем он отрывает у нее крылья, опять говорит - лети, а муха не летит. Он записывает: Если мухе оторвать крылья, то она оглохнет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 17:26 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Не знаю, что пытается мерять ТС, но (с моей кочки зрения) прекрасно видно, что использование памяти начинается с -Xms, может дорасти до -Xmx ... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. VMM сложнее, чем вам кажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 18:22 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
Мурзикmaytonпропущено... Сейчас вот вспомнил как в сериале Симпсоны Нельсон бросает камень в белку и видит что ей больно. И пишет в своём исследовании - "Белки не любят камни". Вот как-то так. Я думаю - лучше так: Экспериментатор говорит мухе - лети, и она летит. Затем он отрывает у нее крылья, опять говорит - лети, а муха не летит. Он записывает: Если мухе оторвать крылья, то она оглохнет :) Ну вобщем ты понял что твои выводы это полная лажа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 18:46 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
maytonНу вобщем ты понял что твои выводы это полная лажа. Буду рад увидеть твои нелажные опровержения моих лажевых выводов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 10:10 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
По терминам есть хороший глоссарий: HotSpotGlossary ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 10:48 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
МурзикmaytonНу вобщем ты понял что твои выводы это полная лажа. Буду рад увидеть твои нелажные опровержения моих лажевых выводов :) А что опровергать? Ты увидел что захотел. P.S. Белки не любят камни... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 13:49 |
|
||
|
Мониторинг памяти в Java SE7
|
|||
|---|---|---|---|
|
#18+
maytonМурзикпропущено... Буду рад увидеть твои нелажные опровержения моих лажевых выводов :) А что опровергать? Ты увидел что захотел. P.S. Белки не любят камни... Хотелось бы узнать, почему мои выводы полная лажа :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2014, 14:47 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2126910]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
192ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
101ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 561ms |

| 0 / 0 |
