powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Мониторинг памяти в Java SE7
25 сообщений из 55, страница 2 из 3
Мониторинг памяти в 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
25 сообщений из 55, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Мониторинг памяти в Java SE7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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