Подтвердить что ты не робот

Размер Java исключения в памяти

Кто-нибудь знает, сколько памяти занимает Исключение, когда оно создано, и выбрано?

Например, NullPointerException.

А как исключаются сбор мусора?

4b9b3361

Ответ 1

Кто-нибудь знает, сколько памяти занимает Исключение при создании и броске?

Это полностью зависит от исключения. Как и любой другой объект, он содержит переменное количество данных; сообщение String может быть 4 МБ, если кто-то сделал что-то глупое:

Exception e = 
    new Exception(new String("Some gigantic message ... lalalalalalalalla"));

( Изменить: ok, это несколько вводит в заблуждение, исключение содержит ссылку на String, а ссылочные значения - фиксированный размер, но сам String может ссылаться только на Исключение - я изменил его на нелитерал, чтобы явно показать, что это может быть что-то, что можно коллекционировать. Пользовательское исключение может содержать что угодно, хотя это объект, как любой другой. Кроме того, это зависит от того, насколько он был выброшен, поскольку он содержит трассировку стека внутри нее. Там хороший Q/A здесь, на SO; В java, что является лучшим способом определить размер объекта, который охватывает это.)

А как исключаются сбор мусора?

Как и любой другой объект. Исключение вызывается стек вызовов и происходит одна из двух:

1) Вы его поймаете и присвоили переменной в блоке catch:

catch (Exception e) {

e теперь содержит единственную ссылку на исключение. Когда больше ссылок на него не существует (т.е. Оно либо выходит из области видимости в нижней части блока catch, либо объект, который вы передаете, чтобы его собирали, и т.д.), Он будет собран.

2) Вы не поймаете его, и он попадает в верхнюю часть стека вызовов для текущего потока. В этот момент исключение выходит за рамки, поэтому оно будет собрано, и поток, конечно, остановлен.

** Чтобы быть полностью педантичным, когда я говорю "собираюсь собраться", я имею в виду, что когда объект в Java больше не ссылается на него, он имеет право на сбор, и GC имеет дело с ним.

Ответ 2

Исключения Java являются объектами, так что любые другие объекты зависят от структуры, если вы создали собственное исключение, которое вы можете (например) сохранить в полном двоичном файле другого объекта до тех пор, пока у вас не будет свободной памяти. Вы можете установить начальное и максимальное пространство для своего приложения. Свободное пространство меняется динамически, и теперь есть вопрос GC. Исключения Java являются объектами, так как любая коллекция мусора других объектов использует правила в вашем Enviorment.

Для краткой справки об исключениях http://docs.oracle.com/javase/tutorial/essential/exceptions/

это статья о сборке мусора, где ключевая концепция

Сводка о сборке мусора в Java

1) Java Heap делится на три поколения для сбора мусора. Это молодые поколения, жилые или старые поколения и Пермская область.

2) Новые объекты создаются в молодое поколение и впоследствии переходят в старое поколение.

3) Пул строк создается в Перми области кучи, сбор мусора может происходить в пермском пространстве, но зависит от JVM и JVM.

4) Незначительная сборка мусора используется для перемещения объекта из пространства Эдена в пространство Survivor 1 и Survivor 2, а основная коллекция используется для перемещения объекта от молодого поколения к поколению.

5) Всякий раз, когда происходит сбор основных мусора, потоки приложений останавливаются в течение этого периода, что снижает производительность и пропускную способность приложений.

6) В сборке мусора в java 6 было несколько улучшений производительности, и мы обычно используем JRE 1.6.20 для запуска нашего приложения.

7) Параметры командной строки JVM -Xmx и -Xms используются для установки начального и максимального размера для Java-кучи. Идеальное соотношение этого параметра равно 1:1 или 1:1,5 на основе моего опыта, например, вы можете использовать оба -Xmx и -Xms как 1 ГБ или -Xms 1,2 ГБ и 1,8 ГБ.

8) В Java нет ручного способа делать сборку мусора.

Подробнее: http://javarevisited.blogspot.it/2011/04/garbage-collection-in-java.html

Если вы используете java 7, интересный вопрос о GC - это

Сбор и сбор мусора Java 7 (JDK 7) в G1

Другое предложение полезно, если вам нужно просмотреть только бит состояния, если вам нужно настроить конфигурацию своего приложения, которое вам нужно для работы с GC GC.

Ответ 3

Это легко узнать самостоятельно. Запустите jvisualvm и прикрепите приложение, которое хотите просмотреть. Перейдите на вкладку "Память" и выберите фильтр для исключения, которое вы ищете.

Это должно дать вам хорошее представление о том, сколько байтов используется объектами исключений, а также, как это относится к вашему размеру общей кучи, и насколько хорошо и как часто они собираются.