区块链技术博客
www.b2bchain.cn

OutOfMemoryError 可以被 try catch 吗 ?求职学习资料

本文介绍了OutOfMemoryError 可以被 try catch 吗 ?求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

Android 复习笔记目录

  1. 唠唠任务栈,返回栈和生命周期
  2. 唠唠 Activity 的生命周期
  3. 扒一扒 Context
  4. 为什么不能使用 Application Context 显示 Dialog?
  5. OOM 可以被 try catch 吗?

本文永久更新地址: https://xiaozhuanlan.com/topic/4903158627

目录

  • OutOfMemoryError 可以被 try catch 吗?
  • 捕获 OutOfMemoryError 有什么意义?
  • JVM 中哪一块内存不会发生 OOM ?

OutOfMemoryError 可以被 try catch 吗?

群里小伙伴碰到的一道比较经典的面试题,但我相信很多第一次碰到这个问题的同学应该无法立刻给出答案,最好的办法肯定还是动手测一测。

注意看下面的 Gif,每点击一次 Allocate 20MB ,都会给数组容量增加 20*1024*1024,当然应该并不是 20 MB。如下面代码所示:

binding.allocate.setOnClickListener {     try {         bytes = ByteArray(bytes.size + 1024 * 1024 * 20)         refreshMemory()     } catch (e: OutOfMemoryError) {         binding.oomError.text = "Catch OOM : n ${e.message}"     } }

OutOfMemoryError 可以被 try catch 吗 ?

当点击第 7 次时,发生了 OutOfMemoryError ,并且 catch 代码块执行了。

Catch OOM : Failed to allocate a 146801680 byte allocation with 25165824 free bytes and 133MB until OOM, target footprint 153948888, growth limit 268435456

所以,OutOfMemoryError 是可以 try catch 的。

顺道画了一个思维导图回顾一下 Java 的异常体系。

OutOfMemoryError 可以被 try catch 吗 ?

上面的图片没有罗列出所有的异常类型,但也基本概括了 Java 异常的继承体系。所有的异常类都继承自 ThrowableThrowable 有两个直接子类 ErrorException

Exception 一般指可以/应该捕获和处理的异常。它的两个直接子类 IOExceptionRuntimeException 及其子类都是我们在代码中经常遇到的一些错误。RuntimeException 是在程序运行中可能发生的异常,我们可以不捕获它,但可能带来 Crash 的代价,但是过多的捕获异常又不利于暴露和调试异常情况。在开发过程中,我们更多的应该及时暴露问题。除了 RuntimeException 以外,其他异常可以统称为 非运行时异常 或者 受检异常,这些异常必须被捕获,否则编译期就会报错。

Error 一般指非正常状态的,比较严重的,不应该被捕获的系统错误。

再回头看看 OutOfMemoryError 的父类们,

OutOfMemoryError <- VirtualMachineError <- Error

OutOfMemoryError 是一个 Error ,Error 不应该被捕获。那么,捕获 OutOfMemoryError 有什么意义呢?

捕获 OutOfMemoryError 有什么意义?

一般情况下并没有什么太大意义,相信你在开发中也几乎没有写过 catch OOM 的代码。

如果你把捕获 OOM 当做处理 OOM 的一种手段,无疑是不合适的。你无法保证你 catch 的代码就是导致 OOM 的原因,可能它只是压死骆驼的最后一根稻草,甚至你也无法保证你的 catch 代码块中不会再次触发 OOM 。

我也从来没有写过捕获 OOM 的代码,但无意中在 Android 源码中发现了这样的操作。在 View.javabuildDrawingCacheImpl() 方法中有这么一段代码:

“`java
try {
bitmap = Bitmap.createBitmap(mResources.getDisplayMetrics(),
width, height, quality);

Android 复习笔记目录

  1. 唠唠任务栈,返回栈和生命周期
  2. 唠唠 Activity 的生命周期
  3. 扒一扒 Context
  4. 为什么不能使用 Application Context 显示 Dialog?
  5. OOM 可以被 try catch 吗?

本文永久更新地址: https://xiaozhuanlan.com/topic/4903158627

目录

  • OutOfMemoryError 可以被 try catch 吗?
  • 捕获 OutOfMemoryError 有什么意义?
  • JVM 中哪一块内存不会发生 OOM ?

OutOfMemoryError 可以被 try catch 吗?

群里小伙伴碰到的一道比较经典的面试题,但我相信很多第一次碰到这个问题的同学应该无法立刻给出答案,最好的办法肯定还是动手测一测。

注意看下面的 Gif,每点击一次 Allocate 20MB ,都会给数组容量增加 20*1024*1024,当然应该并不是 20 MB。如下面代码所示:

binding.allocate.setOnClickListener {     try {         bytes = ByteArray(bytes.size + 1024 * 1024 * 20)         refreshMemory()     } catch (e: OutOfMemoryError) {         binding.oomError.text = "Catch OOM : n ${e.message}"     } }

OutOfMemoryError 可以被 try catch 吗 ?

当点击第 7 次时,发生了 OutOfMemoryError ,并且 catch 代码块执行了。

Catch OOM : Failed to allocate a 146801680 byte allocation with 25165824 free bytes and 133MB until OOM, target footprint 153948888, growth limit 268435456

所以,OutOfMemoryError 是可以 try catch 的。

顺道画了一个思维导图回顾一下 Java 的异常体系。

OutOfMemoryError 可以被 try catch 吗 ?

上面的图片没有罗列出所有的异常类型,但也基本概括了 Java 异常的继承体系。所有的异常类都继承自 ThrowableThrowable 有两个直接子类 ErrorException

Exception 一般指可以/应该捕获和处理的异常。它的两个直接子类 IOExceptionRuntimeException 及其子类都是我们在代码中经常遇到的一些错误。RuntimeException 是在程序运行中可能发生的异常,我们可以不捕获它,但可能带来 Crash 的代价,但是过多的捕获异常又不利于暴露和调试异常情况。在开发过程中,我们更多的应该及时暴露问题。除了 RuntimeException 以外,其他异常可以统称为 非运行时异常 或者 受检异常,这些异常必须被捕获,否则编译期就会报错。

Error 一般指非正常状态的,比较严重的,不应该被捕获的系统错误。

再回头看看 OutOfMemoryError 的父类们,

OutOfMemoryError <- VirtualMachineError <- Error

OutOfMemoryError 是一个 Error ,Error 不应该被捕获。那么,捕获 OutOfMemoryError 有什么意义呢?

捕获 OutOfMemoryError 有什么意义?

一般情况下并没有什么太大意义,相信你在开发中也几乎没有写过 catch OOM 的代码。

如果你把捕获 OOM 当做处理 OOM 的一种手段,无疑是不合适的。你无法保证你 catch 的代码就是导致 OOM 的原因,可能它只是压死骆驼的最后一根稻草,甚至你也无法保证你的 catch 代码块中不会再次触发 OOM 。

我也从来没有写过捕获 OOM 的代码,但无意中在 Android 源码中发现了这样的操作。在 View.javabuildDrawingCacheImpl() 方法中有这么一段代码:

“`java
try {
bitmap = Bitmap.createBitmap(mResources.getDisplayMetrics(),
width, height, quality);

Android 复习笔记目录

  1. 唠唠任务栈,返回栈和生命周期
  2. 唠唠 Activity 的生命周期
  3. 扒一扒 Context
  4. 为什么不能使用 Application Context 显示 Dialog?
  5. OOM 可以被 try catch 吗?

本文永久更新地址: https://xiaozhuanlan.com/topic/4903158627

目录

  • OutOfMemoryError 可以被 try catch 吗?
  • 捕获 OutOfMemoryError 有什么意义?
  • JVM 中哪一块内存不会发生 OOM ?

OutOfMemoryError 可以被 try catch 吗?

群里小伙伴碰到的一道比较经典的面试题,但我相信很多第一次碰到这个问题的同学应该无法立刻给出答案,最好的办法肯定还是动手测一测。

注意看下面的 Gif,每点击一次 Allocate 20MB ,都会给数组容量增加 20*1024*1024,当然应该并不是 20 MB。如下面代码所示:

binding.allocate.setOnClickListener {     try {         bytes = ByteArray(bytes.size + 1024 * 1024 * 20)         refreshMemory()     } catch (e: OutOfMemoryError) {         binding.oomError.text = "Catch OOM : n ${e.message}"     } }

OutOfMemoryError 可以被 try catch 吗 ?

当点击第 7 次时,发生了 OutOfMemoryError ,并且 catch 代码块执行了。

Catch OOM : Failed to allocate a 146801680 byte allocation with 25165824 free bytes and 133MB until OOM, target footprint 153948888, growth limit 268435456

所以,OutOfMemoryError 是可以 try catch 的。

顺道画了一个思维导图回顾一下 Java 的异常体系。

OutOfMemoryError 可以被 try catch 吗 ?

上面的图片没有罗列出所有的异常类型,但也基本概括了 Java 异常的继承体系。所有的异常类都继承自 ThrowableThrowable 有两个直接子类 ErrorException

Exception 一般指可以/应该捕获和处理的异常。它的两个直接子类 IOExceptionRuntimeException 及其子类都是我们在代码中经常遇到的一些错误。RuntimeException 是在程序运行中可能发生的异常,我们可以不捕获它,但可能带来 Crash 的代价,但是过多的捕获异常又不利于暴露和调试异常情况。在开发过程中,我们更多的应该及时暴露问题。除了 RuntimeException 以外,其他异常可以统称为 非运行时异常 或者 受检异常,这些异常必须被捕获,否则编译期就会报错。

Error 一般指非正常状态的,比较严重的,不应该被捕获的系统错误。

再回头看看 OutOfMemoryError 的父类们,

OutOfMemoryError <- VirtualMachineError <- Error

OutOfMemoryError 是一个 Error ,Error 不应该被捕获。那么,捕获 OutOfMemoryError 有什么意义呢?

捕获 OutOfMemoryError 有什么意义?

一般情况下并没有什么太大意义,相信你在开发中也几乎没有写过 catch OOM 的代码。

如果你把捕获 OOM 当做处理 OOM 的一种手段,无疑是不合适的。你无法保证你 catch 的代码就是导致 OOM 的原因,可能它只是压死骆驼的最后一根稻草,甚至你也无法保证你的 catch 代码块中不会再次触发 OOM 。

我也从来没有写过捕获 OOM 的代码,但无意中在 Android 源码中发现了这样的操作。在 View.javabuildDrawingCacheImpl() 方法中有这么一段代码:

“`java
try {
bitmap = Bitmap.createBitmap(mResources.getDisplayMetrics(),
width, height, quality);

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » OutOfMemoryError 可以被 try catch 吗 ?求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们