powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / подскажите что почитать про исключения
25 сообщений из 76, страница 3 из 4
подскажите что почитать про исключения
    #39193744
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Читал, что в плюсах простое появление try-блока автоматически создаёт постоянные накладные расходы.
В ява, насколько я понимаю, основная доля этих расходов "перенесена" на сборку мусора. Соответственно, если уж мы миримся (готовы мириться) со сборкой мусора, то протестовать против исключений - глупо.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39194741
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
      try {
            
        } catch (Exception e) {
        }finally{
        }




прошу так же освятить тему пропавшего Exception при использовании в конструкции finally

и так же вариант решения данной проблемы через Suppressed массив e.getSuppressed()

Petro123Atum1,
это комилится?

можно так :


Код: java
1.
2.
3.
4.
5.
6.
7.
      try {
return 2;
        } catch (Exception e) {
return 3;
        }finally{
return 4;
        }



+ куча задач на понимание всего этого


+ в JDK 7 Suppressed
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39194747
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот пример будет 4

http://ideone.com/kGRaiO


как получить 3 ?
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39194750
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
второй вопрос ка узнать что исключение произошло ? т.е. что мы попали в блок с return 3; ?
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39194754
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1как получить 3 ?
Код: java
1.
return 2 / 0;
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39194765
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1
Код: java
1.
2.
3.
finally {
    return 4;
}

Короче, всегда будет 4
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39194820
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovP.S. Читал, что в плюсах простое появление try-блока автоматически создаёт постоянные накладные расходы.
В ява, насколько я понимаю, основная доля этих расходов "перенесена" на сборку мусора. Соответственно, если уж мы миримся (готовы мириться) со сборкой мусора, то протестовать против исключений - глупо.
Хорошо бы ссылку на источник.

Т.к. хоть какие-то накладные расходы в любом случае будут - например будет длиннее байт код

При чем сборщик мусора и try-catch, мне вообще не понятно.

Выкидывание исключения, явно должно порождать некое торможение. Если какой нибудь цикл миллион раз, то плодить миллион исключений ради "ООПшности" так же глупо, как плодить миллион объектов за зря. И наличие/отсутствие сборщика мусора здесь совершенно не при чем. IMHO & AFAIK
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39194829
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Сам заинтересовался. Слабал простенький тест на Integer.parseInt. Как не парадоксально (но объяснимо), скорость при наличие блока try..catch даже БЫСТРЕЕ, чем без оного )))


Код:
Код: java
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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
public class Excp {
	static String[] arr =
		{ "100500", "100501", "100502", "100503", "100504",
		"100505", "100506", "100507", "100508", "100509", "100510" };  
	static String[] arr_err =
		{ "10050a", "10050b", "10050c", "10050d", "10050e",
		"10050f", "10050g", "10050i", "10050k", "10050l", "10051m" };  
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TimerUtil t = new TimerUtil();
		long res = 0; 
		for ( int pass=0; pass<4; pass++ ) {
			t.start();
			for ( int i=0; i<1000000; i++ ) {
				for ( int j=0; j<arr.length; j++ ) {
					int v = Integer.parseInt( arr[j] );
					res += v;
				}
			}
			t.end();
			System.out.println( "Without try..catch : " + t.getTime() );
		
			t.start();
			for ( int i=0; i<1000000; i++ ) {
				for ( int j=0; j<arr.length; j++ ) {
					try {
						int v = Integer.parseInt( arr[j] );
						res += v;
					} catch ( NumberFormatException e ) {
						res += 1;
					}
				}
			}
			t.end();
			System.out.println( "Without errors : " + t.getTime() );

			t.start();
			for ( int i=0; i<1000000; i++ ) {
				for ( int j=0; j<arr_err.length; j++ ) {
					try {
						int v = Integer.parseInt( arr_err[j] );
						res += v;
					} catch ( NumberFormatException e ) {
						res += 1;
					}
				}
			}
			t.end();
			System.out.println( "With errors : " + t.getTime() );
			System.out.println( "" );
		}
		
	}

}



Результат:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Without try..catch : 260
Without errors : 270
With errors : 12290

Without try..catch : 341
Without errors : 330
With errors : 12090

Without try..catch : 331
Without errors : 320
With errors : 12090

Without try..catch : 331
Without errors : 320
With errors : 12110




...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39194864
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1вот пример будет 4
http://ideone.com/kGRaiO
как получить 3 ?
По БЛ код в finally и exception должен быть разный.
Т.е. не один return переменная.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39194866
grok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevКак не парадоксально ( но объяснимо ), скорость при наличие блока try..catch даже БЫСТРЕЕ, чем без оного )))


так объясните плиз
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39194890
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevP.S. Сам заинтересовался. Слабал простенький тест на Integer.parseInt. Как не парадоксально (но объяснимо), скорость при наличие блока try..catch даже БЫСТРЕЕ, чем без оного )))

В 2016м году за тест без использования jmh надо сразу в junior-developer'ы переводить.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39195055
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Atum1вот пример будет 4
http://ideone.com/kGRaiO
как получить 3 ?
По БЛ код в finally и exception должен быть разный.
Т.е. не один return переменная.

так и есть 3!=4 :)
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39195214
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, на моей железке с jMH

Код: java
1.
2.
3.
4.
5.
6.
# Run complete. Total time: 00:04:05

Benchmark                          Mode  Cnt  Score   Error  Units
TryCatchBenchmark.withErrors       avgt   15  0,458 ± 0,149   s/op
TryCatchBenchmark.withoutErrors    avgt   15  0,376 ± 0,088   s/op
TryCatchBenchmark.withoutTryCatch  avgt   15  0,422 ± 0,129   s/op



Не уверен что точно описал параметры iterations, management, fork, и если кто
имеет основания покорректировать - то пускай делает я не буду возражать.
Код: java
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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
static String[] arr =
            { "100500", "100501", "100502", "100503", "100504",
                    "100505", "100506", "100507", "100508", "100509", "100510" };
    static String[] arr_err =
            { "10050a", "10050b", "10050c", "10050d", "10050e",
                    "10050f", "10050g", "10050i", "10050k", "10050l", "10051m" };

    @Benchmark
    @BenchmarkMode(Mode.AverageTime)
    @OutputTimeUnit(TimeUnit.SECONDS)
    @Warmup     (iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
    @Measurement(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS)
    @Fork(5)
    public void withoutTryCatch(){
        long res = 0;
        for ( int i=0; i<1000000; i++ ) {
            for ( int j=0; j<arr.length; j++ ) {
                int v = Integer.parseInt( arr[j] );
                res += v;
            }
        }
    }

    @Benchmark
    @BenchmarkMode(Mode.AverageTime)
    @OutputTimeUnit(TimeUnit.SECONDS)
    @Warmup     (iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
    @Measurement(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS)
    @Fork(5)
    public void withoutErrors() {
        long res = 0;
        for ( int i=0; i<1000000; i++ ) {
            for ( int j=0; j<arr.length; j++ ) {
                int v = Integer.parseInt( arr[j] );
                res += v;
            }
        }
    }

    @Benchmark
    @BenchmarkMode(Mode.AverageTime)
    @OutputTimeUnit(TimeUnit.SECONDS)
    @Warmup     (iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
    @Measurement(iterations = 3,  time = 1, timeUnit = TimeUnit.SECONDS)
    @Fork(5)
    public void withErrors() {
        long res = 0;
        for ( int i=0; i<1000000; i++ ) {
            for ( int j=0; j<arr.length; j++ ) {
                try {
                    int v = Integer.parseInt( arr[j] );
                    res += v;
                } catch ( NumberFormatException e ) {
                    res += 1;
                }
            }
        }
    }

...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39195225
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominВ 2016м году за тест без использования jmh надо сразу в junior-developer'ы переводить.
Его можно как-то по человечески прицепить к JUnit тестам ?

Сам jmh в доке видел, но ни разу не использовал.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39195229
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял его можно черег егойный API просто вызвать ну так-же как мы вызываем TestSuite.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
   Options opt = new OptionsBuilder()
                .include(TryCatchBenchmark.class.getSimpleName())
                .warmupIterations(2)
                .measurementIterations(2)
                .forks(1)
                .build();

        new Runner(opt).run();
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39195246
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To mayton

Код: java
1.
2.
3.
4.
5.
6.
# Run complete. Total time: 00:04:05

Benchmark                          Mode  Cnt  Score   Error  Units
TryCatchBenchmark.withErrors       avgt   15  0,458 ± 0,149   s/op
TryCatchBenchmark.withoutErrors    avgt   15  0,376 ± 0,088   s/op
TryCatchBenchmark.withoutTryCatch  avgt   15  0,422 ± 0,129   s/op


Можно по русски. Сколько секунд/микросекунд выполнялась каждая процедура?

Score это что такое? На секунды/микросекунды не похоже

Отчего такая феерическая разница с "тупым" System.currentTimeMillis() ? Garbage Collector ? Может ли jmh выдавать параллельно статистику по потреблению памяти, т.к. чисто такты без учета замусоривания памяти вроде сильно ни о чем.

Приведенный класс-бечмарк из Eclipse by default должен запускаться? Или в Eclipse что-то доставлять/добавлять нужно?
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39195280
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, по идее ничего в эклипс не надо добавлять. Это просто maven проект.
Болванку я создал так
Код: java
1.
2.
3.
4.
5.
6.
7.
$ mvn archetype:generate \
          -DinteractiveMode=false \
          -DarchetypeGroupId=org.openjdk.jmh \
          -DarchetypeArtifactId=jmh-java-benchmark-archetype \
          -DgroupId=org.sample \
          -DartifactId=test \
          -Dversion=1.0



Насчёт разницы сложно что-то сказать. 4 минуты это общее суммарное время работы теста
куда вошли эти самые warmup (прогревы) и несколько циклов замеров.

По поводу 0,458б, 0,376, 0,422 - да это похоже среднее число милисекунд на каждый метод.
У меня ноутбук послабее поэтому цифры другие.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39195284
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и похоже я во втором тесте просто не тот абзац скопи-пастил. Лоханулся немного.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39195314
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде JMH умеет еще и память отслеживать через GC or HS_GC profiler. Будет время, поиграюсь

Странная разница. По JMH получилось, что:

1)
withoutErrors = 0,376
TryCatchBenchmark.withoutTryCatch = 0,422

Код без обработки ошибок в 0,422 / 0,376 = 1.122 раза МЕДЛЕННЕЕ, чем код с корректной обработкой ошибок. >10% это уже прилично.

Через тупой System.getcurrenttimemillis у меня получилось самое большее 1.033 раза медленнее. Тенденция та же (медленнее), но разница почти на порядок меньше.

Хотя, возможно, это зависит от версии Java и типа процессора. У меня

java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

AMD FX-4350 4.2 Gh

2)
TryCatchBenchmark.withErrors avgt 15 0,458 ± 0,149 s/op
TryCatchBenchmark.withoutErrors avgt 15 0,376 ± 0,088 s/op

Код с генерацией ошибки работал в 0,458 / 0,376 = 1.21 раза медленнее, чем код, где все без ошибок.

Через тупой System.getcurrenttimemillis 119 823 / 2 607 = 45 !!! раз медленнее. Понятно, что в данную цифру вошли так же затраты на Garbage Collector. Но вот вопрос можно ли "сборку мусора" игнорировать.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39195322
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grokLeonid KudryavtsevКак не парадоксально ( но объяснимо ), скорость при наличие блока try..catch даже БЫСТРЕЕ, чем без оного )))

так объясните плиз
__предположений__ может быть как грязи.

Обработку Exception все равно кому-то делать нужно. Или программисту явно в коде, или JVM. Возможно, что явная обработка обходится дешевле, чем универсальная

Если проводить параллели с C-ными setjmp, longjmp. То неявная обработка - это всегда setjmp/longjmp. А если в коде есть явная обработка и JIT компилятор сделал inline для вызываемой ф-ции, то можно exception заменить на банальный goto.

чисто предположение. Точно знают только авторы JVM и JIT-компилятора.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39195483
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevКод с генерацией ошибки работал в 0,458 / 0,376 = 1.21 раза медленнее, чем код, где все без ошибок.

Через тупой System.getcurrenttimemillis 119 823 / 2 607 = 45 !!! раз медленнее. Понятно, что в данную цифру вошли так же затраты на Garbage Collector. Но вот вопрос можно ли "сборку мусора" игнорировать.
Дальше я пишу свое чортово ИМХО и могу быть с ним не согласен.

Я умышленно уменьшил число форков и думаю зря. В эту формулу GC конечно
тоже входил но его влияние нужно было распылить по максимуму. Например по 0.1% времени
от usertime каждого метода. И думаю не зря там стояло по 10 раз "прогреть машину"
и еще 10 раз замерять.

Кроме того после у тебя все 3 теста шли в 1 методе. Тоесть JIT компиллятор все одним махом
соберет после какого-то executions thresold, а в моем случае каждый тест в своём методе.

Кроме того мы не смотрели байткод. А я думаю что это интересно. Что компиллятор оттуда
выкинул что добавил.

И еще одна ИМХА - в примерах по JMH я обнаружил интересную аннотацию @CompilerControl(CompilerControl.Mode.DONT_INLINE)
Надо почитать как она работает. И помедитировать вообще над компиллятором.

И еще одна ИМХА - надо почитать про оптимизацию генерации стека exception о которой говорил
Блажкович. Возможно важно не количество исключений в цикле а их факт срабатывания
хотя-бы 1 раз за цикл.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39195734
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevХорошо бы ссылку на источник.
Т.к. хоть какие-то накладные расходы в любом случае будут - например будет длиннее байт код
При чем сборщик мусора и try-catch, мне вообще не понятно.Касательно плюсов - только в бумажном виде (С.Мейерс, два издания "Эффективного C++").
Касательно явы ...
Разница в том, что у плюсатых объектов есть деструкторы и компилятор обязан вызывать их когда объект покидает область видимости. Более того, на гарантии этого вызова строятся различные схемы освобождения ресурсов и это поведение никогда не изменится.
Т.к. объекты C++ могут существовать на куче, в статической памяти и на стеке, то при раскручивании стека требуется уничтожить всё, что было создано непосильным трудом. Включая и сам объект-исключение, т.к. он тоже создавался на стеке. Но поскольку объект-исключение нужен - компилятор вынужден вставлять код копирования этого объекта. Хотя такое копирование можно оптимизировать в некоторых сценариях, скорости плюсатым исключениям всё это не добавляет.
В ява объекты создаются исключительно на куче, деструкторы отсутствуют и компилятору достаточно "таскать" ссылку на объект.
Накладные расходы, разумеется, будут, но много меньше.Если какой нибудь цикл миллион раз, то плодить миллион исключений ради "ООПшности"И вам повторю, что если в цикле есть try-блок, то это ещё не означает, что исключение будет возникать при каждой итерации.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39196028
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я к тому, что исключение это все таки механизм для обработки ошибочных ситуаций. Т.е. потенциально их не должно быть много.

Часто же они начинают использоваться как некий признак при корректной работе.

Например, предположим, что у нас есть последовательность слов и нам нужна проверка: число/не число. IMHO использовать исключения в данном случае, не очень хорошая идея. Вне зависимости от языка.
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39196037
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЯ к тому, что исключение это все таки механизм для обработки ошибочных ситуаций. Т.е. потенциально их не должно быть много.
вроде это все знают.
Кроме того, отладка не только в логах бывает. Неудобно отлаживать пошагово при исключениях))
...
Рейтинг: 0 / 0
подскажите что почитать про исключения
    #39196052
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЯ к тому, что исключение это все таки механизм для обработки ошибочных ситуаций. Т.е. потенциально их не должно быть много.+1 я про это тоже говорил.
...
Рейтинг: 0 / 0
25 сообщений из 76, страница 3 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / подскажите что почитать про исключения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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