Как виртуальная машина Java знает, когда бросать исключение NullPointerException? Проверяет ли он каждый метод, который я вызываю на объект, если объект имеет значение null, чтобы проверить, нужно ли ему перебрасывать исключение NullPointerException? И если так, разве это не так медленно?Как JVM знает, когда бросать исключение NullPointerException
ответ
Есть два способа, которыми JVM может использовать, чтобы «обнаружить» в аннулирует.
Он мог бы проверить явно. Это представляет собой накладные расходы, но JIT может оптимизировать некоторые из тестов; например если метод вызывает метод на
this
, он не может дать NPE, и если один вызов с использованием ссылки givem не будет тогда NPE, то другой тоже не будет.Он может реализовывать его с использованием оборудования виртуальной памяти. JVM устраивает, что нулевая страница в своем виртуальном адресном пространстве отображается на страницу, которая нечитабельная + неприступная. Поскольку
null
представлен как ноль, когда код Java пытается разыменоватьnull
, это приведет к передаче сигнала «segfault» в JVM. Обработчик сигналов segfault JVM может задержать это, выяснить, где выполнялся код, и создать и выбросить NPE в стек текущего потока.Это сложно и довольно дорого, но это не имеет значения, поскольку NPE должны быть редкими в обычной программе.
NULLPointerException - это в основном исключение времени выполнения, т. Е. JVM ожидает, что фактический объект будет ссылаться, когда вы выполняете какую-либо операцию.
Чтобы понять это лучше, вам нужно знать, как создается объект и ссылаться в java.Here синтаксис: myClass o = new myClass();
В этом случае объект создается в кучном пространстве с o как ссылка на этот объект i.e o в основном указывает на этот объект. Во время выполнения JVM определяет фактический объект, на который указывает o, и используется для выполнения операции.
Так что давайте просто скажем, что у вас есть метод doSomething() как метод экземпляра для вышеуказанного myClass defintion, и вы вызываете его так, как это делает o.doSomething(), поэтому JVM найдет фактический объект и вызовет этот метод.
Но если вы установили o = null; то o не указывает на фактический объект myclass, то есть o не указывает на ничего. Итак, теперь во время выполнения o.doSomething JVM узнает, что o ничего не указывает и выбрасывает исключение NULLPointerException в этом случае.
Его не так, потому что его способ JVM разрабатывается, чтобы работать с объектами, на которые ссылаются объекты, которые происходят во время выполнения, и если вы не обрабатываете проверку NULL proproprly в своей программе, а исключение NULLpointerException выбрано JVM, то ваша программа сбои и jvm завершаются.
см Java документ для получения дополнительной информации: http://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html
- 1. RecyclerView бросать NullPointerException
- 2. JSP не бросать NullPointerException
- 3. Когда ловить Исключение против Когда бросать Исключения?
- 4. Когда бросать исключение и когда просто возвращаться?
- 5. Html.fromHtml продолжает бросать NullPointerException
- 6. Решение о разработке метода; когда бросать исключение?
- 7. Какое исключение бросать, когда поток неожиданно выходит?
- 8. Когда бросать исключение во время выполнения?
- 9. AWAIT HttpClient.SendAsync не бросать исключение, когда ожидается
- 10. бросать исключение из WCF
- 11. Анализировать бросать NullPointerException для logInInBackground
- 12. Injected service продолжает бросать NullPointerException
- 13. Весна, где бросать исключение
- 14. бульдозер бросать NullPointerException на getClassMap
- 15. Ловить и бросать NullPointerException в Java
- 16. NHibernate Expression.In бросать исключение
- 17. бросать Исключение нулевого указателя
- 18. Бросать или не бросать исключение в C#
- 19. Исключение - зачем даже бросать?
- 20. Когда возвращать bool, бросать исключение и какое исключение выкидывать
- 21. EXC_BAD_ACCESS бросать исключение
- 22. Возвращение истинным или ложным или бросать исключение
- 23. word.shape.name бросать исключение
- 24. Избегайте бросать исключение нового
- 25. Какой смысл бросать исключение?
- 26. Когда бросать исключения?
- 27. Когда бросать исключения для конструктора
- 28. Как JVM «бросает» исключение
- 29. Как обрабатывать исключение NullpointerException, когда запрос вызывает исключение?
- 30. Странный путь показано исключение, когда JVM падает
В горячей точке оба подхода используются на основе информации профилирования типа/нулевого значения – the8472