2014-01-10 2 views
12

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

Например, NullPointerException.

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

+12

Они собираются так же, как и любой другой объект Java. Почему в них что-то особенное? –

+6

Размер исключения будет зависеть от вашей реализации Java и глубины стека вызовов. Для чего вам нужна эта информация? У вас, вероятно, не должно быть исключений из-за zillion, потому что это не имеет большого значения в большинстве случаев. – user2357112

+1

Я полностью согласен с Марком, это должен быть ответ на ваш вопрос. – Keerthivasan

ответ

3

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

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

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

(Edit: нормально, это несколько вводит в заблуждение, исключение содержит ссылку на String и эталонные значения имеют фиксированный размер, но String Исключение может быть вызвано только ссылкой - я изменил его на нелитерал, чтобы явно показать, что это может быть что-то, что можно коллекционировать. Обычное исключение может содержать что угодно, но это объект, как любой другой. Кроме того, это зависит от того, как far он был выброшен, так как он содержит трассировку стека внутри него. Там есть хороший Q/A здесь, на SO; In java, what is the best way to determine the size of an object, который покрывает это.)

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

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

1) Ты ловишь его, и ему присваивается переменной в блоке загвоздка:

catch (Exception e) { 

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

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

** Для того, чтобы быть полностью педантичным, когда я говорю «будет получить собранный» Я имею в виду в конце концов как, когда объект в Java больше не имеет ссылок на него, это его право для сбора, и GC сделок с ним.

0

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

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

1

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

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

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

Резюме по сбору мусора в Java

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

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

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

4) Незначительная сборка мусора используется для перемещения объекта из пространства Эдена в пространство для выживания 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) garbage collection and documentation on G1

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

Смежные вопросы