powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Мониторинг памяти в Java SE7
55 сообщений из 55, показаны все 3 страниц
Мониторинг памяти в Java SE7
    #38690839
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, уважаемые дамы и господа.
Пытаюсь мониторить использование памяти в Java SE7 при помощи MXBean.

код -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;

public class TestMXBean {
	static double doubleOne=1e3;
	static double doubleTwo=2e3;
	public static void main(String[] args) {		
		MemoryMXBean mxBean = ManagementFactory.getMemoryMXBean();
		System.out.println("Non Heap:");
		System.out.print("	used=" + mxBean.getNonHeapMemoryUsage().getUsed()/1024);
		System.out.print("	commited="+mxBean.getNonHeapMemoryUsage().getCommitted()/1024);
		System.out.print("	Max="+mxBean.getNonHeapMemoryUsage().getMax()/1024);
		System.out.println("	init="+mxBean.getNonHeapMemoryUsage().getInit()/1024);
		System.out.println("Heap:");
		System.out.print("	used=" + mxBean.getHeapMemoryUsage().getUsed()/1024);
		System.out.print("	commited="+mxBean.getHeapMemoryUsage().getCommitted()/1024);
		System.out.print("	Max="+mxBean.getHeapMemoryUsage().getMax()/1024);
		System.out.println("	init="+mxBean.getHeapMemoryUsage().getInit()/1024);
	}
}

Вроде выдает корректные данные по heap и PermGen (сравнивал с jconsole).
Вопрос - можно ли верить этим данным?
Еще вопрос - как программно получить инфу об использовании Stack (размер задается ключом -Xss) ?

Заранее спасибо.
До свидания.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38690853
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикВопрос - можно ли верить этим данным?...
Верить никому нельзя.
Особенно если у Вас на компьютере процессор Intel, там даже в Pentium'ах бага была. )))
МурзикЕще вопрос - как программно получить инфу об использовании Stack (размер задается ключом -Xss) ?

Зачем?
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38690866
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикВроде выдает корректные данные по heap и PermGen (сравнивал с jconsole).
Вопрос - можно ли верить этим данным?
Еще вопрос - как программно получить инфу об использовании Stack (размер задается ключом -Xss) ?

Вопрос веры/неверы это какой-то сугубо личный вопрос.

Можчно качнуть исходники MemoryMXBean и просто посмотреть откуда он их получает.
И дальше будет совсем другая формулировка. Какой смысл Oracle/Sun вкладывает
в эти счётчики и есть-ли им реальная подоплёка.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38690924
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Так как верить никому нельзя, я хочу проверить, где создаются переменные:
1. Примитивные
2. Строки
3. Статические переменные
4. Переменные уровня экземпляра при задании какого-то хитрого ХХ-ключа JVM.

также мне интересно, освобождает ли GC область памяти PermGen.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38690945
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикТак как верить никому нельзя, я хочу проверить, где создаются переменные:
1. Примитивные
2. Строки
3. Статические переменные
4. Переменные уровня экземпляра при задании какого-то хитрого ХХ-ключа JVM.

также мне интересно, освобождает ли GC область памяти PermGen.

1. Локальные переменные создаются на стеке. Не важно примитивы или ссылка на объект.
2. Строки это объекты. Живут в куче как все либо в пуле строк. Пул живет в PermGen или MetaSpace.
3. Статические переменные это поля объекта-класса. Они живут в куче, как и сам класс. Скорее всего в PermGen/MetaSpace.
4. Какого такого хитрого ключа?
5. PermGen освобождается.

Это и много другое можно смотреть в профайлерах (например VisualVM) или инструментах разработки - jstat, jconsole, mission control
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38690964
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мурзик...я хочу проверить, где создаются переменные...
1. Документации от вендора Вы тоже не верите?
2. Каким образом Ваш вопрос соотносится с данной задачей?

Мурзиктакже мне интересно, освобождает ли GC область памяти PermGen
Статистику по PermGen получить вроде элементарно. По стеку, не факт, что на уровне Java это возможно. По хорошему стек нужно смотреть на уровне OS.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38690989
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь пишут
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.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38690995
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну "не все так однозначно" ( C ) дочь офицера

Вроде stack size распространяется и на native потоки. Т.ч. в общем виде "получить инфу об использовании Stack" вроде задача не совсем тривиальная. Но зачем это надо практически - понять сложно

+ у меня какой-то шумок в голове, что никто не обещал, что java thread будет однозначно соответствовать os thread. Хотя, похоже, в последних версиях Java это именно так.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38690996
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stackdepth - совсем другое.
Плюс, FR - коммерческая фишка и для его легального использования требуется прикупить соответствующую лицензию.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38691039
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим у нас есть рекурсивная функция которая обходит
сайты, файловую систему или древовидную DBMS.
Какие числовые оценки можно делать для стека? И зачем?
Какие выводы можно делать? Что стека не хватит? Почему
софт так написан? Может использовать template преобразования
рекурсии в FSM+Queue(Collection) ? Может ограничить глубину
рекурсии парамертром maxDepth в аргументах и использовать
проверку?

Вообще что даёт сама метрика? Что софт плохой?
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38691046
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...Какие числовые оценки можно делать для стека?...
Ну я бы рекомендовал написать тест. Посмотреть когда упадет (на каком уровне вложенности). Поделил одно на другое и сделал бы оценку.

IMHO & AFAIK:
1) А вообще рекурсия это зло. В том числе и по данной причине. Сложно контролировать выделение ресурсов.
2) Если heap можно достаточно безболезненно задирать, то задирать стек, из-за того, что ОДНА функция в системе сделана через рекурсию и ей категорически не хватает стека.... это попахивает бредом.... Проще и лучше дать пинка программисту и развернуть с цикл и/или ручной стек
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38691055
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Развёртывание стека - это хардкор. Тяжёлая артиллерия. В 99% ее никто не будет делать.
Будут искать компромиссное решение. Крутить настройки сервера. Бить задачу на порции
как хадупах или форк-джойнить и запускать в разных нодах/серверах. Готов поспорить
что так и будет.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38691145
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остаётся только вопрос - задлянафига автору вообще знать размер стека.
И, не исключено, выяснится, что ищет он не там, где потерял, а там, где светло.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38691550
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Ключ именуется: -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.
public class TestPrimitive {
 public static void main(String[] args) {
	 System.out.println(Runtime.getRuntime().freeMemory());
	 System.out.println("RUN");
	 double a1=1e3; double b1=1e4;double c1=1e5;double d1=1e6;double e1=1e7;double f1=1e7;double g1=1e8;double h1=1e9;
...
	 double a1000=1000e3; double b1000=1000e4;double c1000=1000e5;double d1000=1000e6;double e1000=1000e7;double f1000=1000e7;double g1000=1000e8;double h1000=1000e9;

	 System.out.println(Runtime.getRuntime().freeMemory());
	 
 }
}
(: Создавал не сам - мне помог excel :)

Запускаю так -
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).
Именно поэтому я очень люблю проверять то, что написано - на заборе вот тоже много чего написано, а за забором - дрова :)
Такие вот мысли.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38691585
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикКлюч именуется: -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 и смотреть как реализован стэк.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38691628
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикЗадавался вопрос - почему я не верю документации от вендора.
Ответ такой: Был я как-то на московской конференции Тома Кайта и он сказал, что надо верить только тому, что прошло через ваши руки здесь и сейчас.
Может что-то измениться - например, выйдет новый релиз, в котором будет изменено именно ЭТОИменно поэтому существует тестирование обновлений. По логике, об этом дядюшка Кайт должен был (тоже) сказать.Дока писалась для определенной версии java - после этого вышло около 60-ти релизов (версия 1.7.60)Вы уже демонстрируете издержки не чтения документации: начиная с u25 нумерация идёт "через пять".
Документация, кстати, тоже обновляется.Именно поэтому я очень люблю проверять то, что написано - на заборе вот тоже много чего написано, а за забором - дрова :)
Такие вот мысли.Документация отличается от забора в одном важном отношении: только вдумчивое чтение позволяет формулировать правильные вопросы.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692008
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаем доку:
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) - помогите пож-ста найти там, где темно.
Заранее спасибо.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692041
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикЧитаем доку:
http://docs.oracle.com/javase/specs/jls/se7/html/index.html
Обратите внимание на дату - 2013-02-28
Я правильно понимаю, что с тех пор java изменялась отдельно от доки?

Java может изменятся в соответствии с графиком выхода критических
патчей. А документ который входит в релиз может вполне датироваться
датой релиза. Это нормально.

Твой самый первый вопрос касался Java SE7 ? Верно?
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692042
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А спецификация SMTP определена в RFC-821 от, страшно подумать, 1982 года.
Как же у нас почта до сих пор ходит???

P.S. Слово спецификация выделено совершенно не случайно.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692044
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикЧитаем доку:
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
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692048
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мурзик,

Какая конкретно задача? Посмотреть как утроет стек потока в Hotspot?
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692068
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О! Открыл для себя интересную фичу.
VisualVM -> Heap Dump -> Summary -> Threads at the heap dump -> Show Threads
Показывает дамп потоков с локальными переменными. По-моему только теми, которые на кучу ссылаются. Примитивов не наблюдаю.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692070
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересное продолжение -
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 она очень хорошо используется :)

Где же можно овладеть этими терминами, как не в первоисточнике?
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692076
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикПо крайней мере, в доке о поколениях или (составных частях) памяти heap не говорится.
Оно говорится в доках описывающих алгоритмы Garbage Collection

Мало того, при разных алгоритмах GC, разделение памяти на поколения (или составные части) может меняться.

AFAIK
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692080
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сведения о памяти не скрываются. Они изложены в спецификации. Детали реализации - в исходных текстах.
И на это вам уже указывали.

Проблема в том, что искомое вами никак не поможет ни в разработке, ни в отладке, ни в эксплуатации. Очень крутое и совершенно бесполезное знание.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692086
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикНа этой странице я попытался найти слово 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
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692089
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мурзик,

И ещё полезных ссылок:
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. Его зона доминирования заканчивается рунетом.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692150
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПотому что работа GC она не покрывается спецификацией. GC у разных JVM может работать совершенно по-разному. И может даже вообще без GC.
Тема большая. С наскока будет не просто:


Получается, что структура памяти - все эти heap (и порожденный им PermGen)/stack у каждой JVM своя?
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692164
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикПолучается, что структура памяти - все эти heap (и порожденный им PermGen)/stack у каждой JVM своя?
Да. Можно так сказать.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692201
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем за помощь, нашел доку http://www.oracle.com/technetwork/java/javase/tech/memorymanagement-whitepaper-1-150020.pdf, буду читать и думать.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692223
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не забудь посмотреть на дату этого документа :)
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692231
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я смотрю, здесь пользуются jconsole и visualvm, а java mission center от jrockit кто-нибудь использует, в 8 и даже в последнем update 7 есть. Мне понравился, на eсlipse сделан, смущает только что профайлер надо использовать с аргументами -XX:+UnlockCommercialFeatures -XX:+FlightRecorder?
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692252
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНе забудь посмотреть на дату этого документа :)

Сразу же посмотрел - он времен Очаковских и...
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38692263
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FDсмущает только что профайлер надо использовать с аргументами -XX:+UnlockCommercialFeatures -XX:+FlightRecorder? Правильно смущает .
Со второй колонки начинаются платные варианты.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693277
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попутно возник еще один вопрос - может ли GarbageCollector, освобождая память heap, освободить память, занимаемую процессом ОС?
В прилагаемом файле эта память обведена красной рамкой.

Заранее спасибо
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693288
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикПопутно возник еще один вопрос - может ли GarbageCollector, освобождая память heap, освободить память, занимаемую процессом ОС?
Мне кажется это не совсем задача GC.
JVM может уменьшит размер кучи, если решит что она излишне велика для насущных задачь.
Под Windows раньше была такая бага, что JVM не могла вернуть мапять в ОС. Актуальна ли она сейчас - не знаю.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693292
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Актуальна
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693295
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693302
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикАктуальна
Пруфлинк?
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693466
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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).

Буду рад конструктивной критике.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693478
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикБуду рад конструктивной критике.
http://www.sql.ru/forum/rules.aspx Рекомендуется:
Для повышения удобочитаемости сообщений - пользоваться специальными кодами для выделения слов (b, u, i, color) ( но не злоупотреблять ими ) и тегом форматирования исходных кодов src .
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693481
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикЗапуск с ключом -XX:+UseParallelGC
-XX:+UseAdaptiveSizePolicy ?
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693486
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикБуду рад конструктивной критике.
Вот. То же самое. Но, какое оформление!
http://www.stefankrause.net/wp/?p=14
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693556
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczМурзикЗапуск с ключом -XX:+UseParallelGC
-XX:+UseAdaptiveSizePolicy ?


Бесполезняк - не чистит:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
java -Xms1240k -Xmx512m -XX:+UseParallelGC -XX:+UseAdaptiveSizePolicy TestHeapSize
477364224
3584488
wait 1
477364224
36570760
wait 2
477364224
117893976

С памятью из диспетчера:
Код: plaintext
1.
wait 1 -> 5592
wait 2 -> 125648 / 126264

Постарался не перестараться с оформлениями - а то за синими деревьями не увидим леса, в который чем дальше, тем непонятнее. И хоть меняй ты мусороуборщика, хоть не меняй ...
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693562
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикБесполезняк - не чистит:

А на линухе?

МурзикПостарался не перестараться с оформлениями - а то за синими деревьями не увидим леса, в который чем дальше, тем непонятнее. И хоть меняй ты мусороуборщика, хоть не меняй ...
Дорогой дневничок...
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693592
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

а там в команде ps какой ключ надо указать, чтобы видеть память?
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693603
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикЗаключение: Освобождает память (и то не всю только G1GC)
Сейчас вот вспомнил как в сериале Симпсоны Нельсон бросает камень в белку
и видит что ей больно. И пишет в своём исследовании - "Белки не любят камни".

Вот как-то так.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693635
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМурзикЗаключение: Освобождает память (и то не всю только G1GC)
Сейчас вот вспомнил как в сериале Симпсоны Нельсон бросает камень в белку
и видит что ей больно. И пишет в своём исследовании - "Белки не любят камни".

Вот как-то так.

Я думаю - лучше так:

Экспериментатор говорит мухе - лети, и она летит.
Затем он отрывает у нее крылья, опять говорит - лети, а муха не летит.

Он записывает: Если мухе оторвать крылья, то она оглохнет :)
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693707
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, что пытается мерять ТС, но (с моей кочки зрения) прекрасно видно, что использование памяти начинается с -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.
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Scanner;

public class GCTest {
  private static ArrayList data = new ArrayList();
  private static Runtime rt = Runtime.getRuntime();
  private static Scanner s = new Scanner( System.in );

  static void info( int i, long f, long m ) {
    final String ptrn = "Iterations: {0}, Free: {1} Kb, Max: {2} Kb";
    f = (f+512)/1024;
    m = (m+512)/1024;
    System.out.println( MessageFormat.format( ptrn, i, f, m ) );
  }

  public static void main( String[] args ) throws IOException {
    int i = 0, j = 300;
    System.gc();
    info( i, rt.freeMemory(), rt.maxMemory() );
    s.nextLine();
    for ( i = 0; i < j; i++ ) {
      data.add( new int[1024*1024] );
      Thread.currentThread().yield();
    }
    info( i, rt.freeMemory(), rt.maxMemory() );
    s.nextLine();
    for ( i = 0; i < j; i++ ) {
      data.remove(data.size() - 1);
      if ( 0 == i%10 ) {
        System.gc();
      }
      Thread.currentThread().yield();
    }
    info( i, rt.freeMemory(), rt.maxMemory() );
    s.nextLine();
  }
}

То, что "однажды взятое", типа, не возвращается системе - нифига не дефект.
VMM сложнее, чем вам кажется.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38693733
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мурзикmaytonпропущено...

Сейчас вот вспомнил как в сериале Симпсоны Нельсон бросает камень в белку
и видит что ей больно. И пишет в своём исследовании - "Белки не любят камни".

Вот как-то так.

Я думаю - лучше так:

Экспериментатор говорит мухе - лети, и она летит.
Затем он отрывает у нее крылья, опять говорит - лети, а муха не летит.

Он записывает: Если мухе оторвать крылья, то она оглохнет :)
Ну вобщем ты понял что твои выводы это полная лажа.
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38694036
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу вобщем ты понял что твои выводы это полная лажа.

Буду рад увидеть твои нелажные опровержения моих лажевых выводов :)
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38694083
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По терминам есть хороший глоссарий:
HotSpotGlossary
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38694321
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикmaytonНу вобщем ты понял что твои выводы это полная лажа.

Буду рад увидеть твои нелажные опровержения моих лажевых выводов :)
А что опровергать? Ты увидел что захотел.

P.S. Белки не любят камни...
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38694422
Мурзик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМурзикпропущено...


Буду рад увидеть твои нелажные опровержения моих лажевых выводов :)
А что опровергать? Ты увидел что захотел.

P.S. Белки не любят камни...

Хотелось бы узнать, почему мои выводы полная лажа :)
...
Рейтинг: 0 / 0
Мониторинг памяти в Java SE7
    #38694843
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МурзикХотелось бы узнать, почему мои выводы полная лажа :)Потому, что выделение памяти внутри приложения и выделение памяти для приложения - две совершенно разные задачи.
...
Рейтинг: 0 / 0
55 сообщений из 55, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Мониторинг памяти в Java SE7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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