Ответы пользователя по тегу Исключения
  • Насколько дорог throw?

    Colwin
    @Colwin Автор вопроса
    Ведущий Java-разработчик
    Написал небольшой тестик:

    
    public class Test
    {
        public static final RuntimeException fex = new RuntimeException();
    
        public static void main(String[] args) throws Exception {
            long start;
            long end;
    
            start = System.currentTimeMillis();
    
            for (int i = 0; i < 10000; i++) {
                testReturn(0);
            }
    
            end = System.currentTimeMillis();
    
            System.out.println("Return time: " + (end - start) + "ms");
    
            start = System.currentTimeMillis();
    
            for (int i = 0; i < 10000; i++) {
                try {
                    testExceptionThrow(0);
                } catch (RuntimeException e) {
                }
            }
    
            end = System.currentTimeMillis();
    
            System.out.println("Exception throw time: " + (end - start) + "ms");
    
            start = System.currentTimeMillis();
    
            for (int i = 0; i < 10000; i++) {
                try {
                    testExceptionCreate(0);
                } catch (RuntimeException e) {
                }
            }
    
            end = System.currentTimeMillis();
    
            System.out.println("Exception create time: " + (end - start) + "ms");
        }
    
        public static void testReturn(int count) {
            if (count > 1000) {
                return;
            } else {
                testReturn(count + 1);
            }
        }
    
        public static void testExceptionThrow(int count) {
            if (count > 1000) {
                throw fex;
            } else {
                testExceptionThrow(count + 1);
            }
        }
    
        public static void testExceptionCreate(int count) {
            if (count > 1000) {
                throw new RuntimeException();
            } else {
                testExceptionCreate(count + 1);
            }
        }
    }
    


    В результате имеем следующие цифры:

    Return time: 15ms
    Exception throw time: 203ms
    Exception create time: 1079ms


    Тест, конечно, не претендует на большую точность, однако порядок величин показывает.
    Ответ написан
    Комментировать