首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

try-catch能捕获Out Of Memory Error吗?

try { 代码A } catch (OutOfMemoryError ignored) { 代码B } 试验了一下似乎可行。但一般认为OOM发生在系统层级,上述代码无法获得期望效果。...只有在一种情况下,这样做是可行:在try语句中声明了很大的对象,导致OOM,并且可以确认OOM是由try语句中的对象声明导致的,则在catch语句中,可以释放掉这些对象,解决OOM,继续执行剩余语句。...因为OOMError是可以catch的。catch之后吞掉的话程序还能试着继续运行。比如一个Java服务器端应用,有段代码没写对导致有一个线程在疯狂创建大数组对象——直到OOM。...Java中管理内存除了显式catch OOM外还有更多有效的方法:比如SoftReference, WeakReference, 硬盘缓存等。...如果OOM的原因不是try语句中的对象(比如内存泄漏),那么在catch语句中会继续抛出OOM!

94820
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    try-catch能捕获Out Of Memory Error吗?

    try { 代码A } catch (OutOfMemoryError ignored) { 代码B } 试验了一下似乎可行。但一般认为OOM发生在系统层级,上述代码无法获得期望效果。...只有在一种情况下,这样做是可行:在try语句中声明了很大的对象,导致OOM,并且可以确认OOM是由try语句中的对象声明导致的,则在catch语句中,可以释放掉这些对象,解决OOM,继续执行剩余语句。...因为OOMError是可以catch的。catch之后吞掉的话程序还能试着继续运行。比如一个Java服务器端应用,有段代码没写对导致有一个线程在疯狂创建大数组对象——直到OOM。...Java中管理内存除了显式catch OOM外还有更多有效的方法:比如SoftReference, WeakReference, 硬盘缓存等。...如果OOM的原因不是try语句中的对象(比如内存泄漏),那么在catch语句中会继续抛出OOM!

    54130

    try-catch 的实现

    try-catch基本所有的编程语言都会有异常捕捉的语法,try-catch 基本是所有编程语言都会有的信息,他会捕捉 try 中语法错误,如果存在语法错误就会执行 catch 的内容。...在上代码之前,我们首先需要确定,如果我们自己实现一个 try-catch 我们需要的是什么?...这两个函数都保存在头文件#include 中。代码实现有了上述的背景铺垫,那么 try-catch 实现相对容易理解一点。...,但是真正的机制实现我们需要是心啊 try 和 catch 能够使用这个逻辑,而 C 语言中,只有宏定义才能引入一个外部变量,所以宏定义如下:#define Try do{ \volatile int...(C) {printf("catch C : %ld\n", selfid); } EndTry; Try {Throw(D, "D"); } Catch (D) {printf("catch D :

    13410

    替代try catch处理异常的优雅方式

    所以代码中就会出现大量的try {...} catch {...} finally {...}代码块,不仅有大量的冗余代码,而且还影响代码的可读性。...丑陋的 try catch 代码块 优雅的Controller 上面的示例,还只是在Controller层,如果是在Service层,可能会有更多的try catch代码块。...注意到上面对异常按阶段进行分类,大体可以分成:进入Controller前的异常 和Service层异常,具体可以参考下图: 不同阶段的异常 目标 消灭95%以上的try catch代码块,以优雅的...Assert(断言) 方式来校验业务的异常情况,只关注业务逻辑,而不用花费大量精力写冗余的try catch代码块。...(e.getMessage(), e); int code = CommonResponseEnum.SERVER_ERROR.getCode(); try {

    42421

    java——异常时try catch finally的用法 出现异常之后典型的处理方式

    处理异常的格式为: try{ 异常代码 }catch{ 异常的处理 }finally{ 异常的出口(无论是否触发异常,都一定会执行) } try 代码块中放的是可能出现异常的代码. catch...("触发了异常"); }finally { System.out.println("处理完了"); } } 执行结果为 出现异常之后的一些典型的处理方式...下图表示 Java 内置的异常类之间的继承关系: 顶层类 Throwable 派生出两个重要的子类, Error 和 Exception 其中 Error 指的是 Java 运行时内部错误和资源耗尽错误...{ return 3; } } 这里的try catch 中都有return,finally会在return生效之前就执行完了,此时要是finally也有...return的话,原来的try/catch中的return就执行不到了。

    63520

    try catch 中的异常怎么处理?

    下面我们把镜头转向正在加班开发需求的几位选手, 看看他们是如何对待异常处理逻辑的; ---- round one 这是来自一个对try catch第一次使用的 #$%^选手 try { .........此招式可使问题永远藏在 #$%^ 的代码中, 永远做一个"优秀的开发者", 相信他会在自己的梦想道路上渐行渐远 ---- round two 这是来自一个对try catch第二次使用的 *&^% 选手...fun1(); fun2(); ...... . . . } catch (Execption e) { log.error("处理***业务出错了", e.getMessage());...空指针, 数组越界, 类型转换, … 一个一个排查吧. ---- round four (划重点, 最常见, 隐患最多的一种写法) 这是来自一个对try catch第三次使用的 4 号选手 try {.... . } catch (Execption e) { log.error("处理***业务出错了", e); // 写你自己的异常处理逻辑 } 结尾再说两句 使用log框架中方法.进行日志输出

    1.2K10

    满屏的try-catch,你不瘆得慌?

    --如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高, 所以我们使用下面的策略,可以避免输出 Error 的日志-->...即, 的日志都是当天的。 --> ${logPath}/error.log <!...contextName节点 标识一个上下文名称,默认为default,一般用不到 property节点 标记一个上下文变量,属性有name和value,定义变量之后可以使用${}来获取。...该节点有几个重要的子节点,如下: filter:日志输出拦截器,没有特殊定制一般使用系统自带的即可,但是如果要将日志分开,比如将ERROR级别的日志输出到一个文件中,将除了ERROR级别的日志输出到另外一个文件中...maxHistory : 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,,例如设置为30的话,则30天之后,旧的日志就会被删除 totalSizeCap: 可选节点,用来指定日志文件的上限大小

    27821

    不用try catch,如何机智的捕获错误

    这不,有人提issue: 你们这样在try catch中执行用户代码会让浏览器调试工具的Pause on exceptions失效。...这个功能可以很方便的帮我们发现未捕获的错误发生的位置。 但是,当React将用户代码包裹在try catch后,即使代码抛出错误,也会被catch。...而在开发环境,为了更好的调试体验,需要重新实现一套try catch机制,包含如下功能: 捕获用户代码抛出的错误,使Error Boundary功能正常运行 不捕获用户代码抛出的错误,使Pause on...如何“捕获”错误 让我们先实现第一点:捕获用户代码抛出的错误。 但是不能使用try catch,因为这会让Pause on exceptions失效。 解决办法是:监听window的error事件。...在callCallback内执行到throw Error(123),抛出错误 callCallback执行中断,但调用他的函数会继续执行。

    2.7K51

    关于try catch finally的一些小细则

    细则: 1.try块是必须的,catch块和finally块都是可选的,但必须存在一个或都存在。try块不能单独存在。...2.try块里的语句运行中出现异常会跳过try块里其他语句,直接运行catch里的语句。 3.无论try块中是否有异常,无论catch块中的语句是否实现,都会执行finally块里的语句。...4.如果try块或catch块中有return语句,finally块里的语句会执行在try块或catch块中的return语句前。...5.如果finally块里有return语句,则直接返回,而不执行try块或catch块里的return语句。...6.只有一种办法不执行finally块里的语句,那就是调用System.exit(1);方法,即退出java虚拟机。 强调:finally块里的语句在try或catch里的人return前执行!!!

    48120

    try catch引发的性能优化深度思考

    我开始意识到这个问题的原因在那里了,把目光转向了 try catch 代码块,这是一个很可疑的地方,在很早之前曾经听说过不合理的 try catch 是会影响性能的,但是之前从没遇到过,结合了一些资料,...事实上 plus1 和 plus2 函数的代码逻辑是一致的,只有代码语义是不相同,一个是返回 1,另一个是错误抛出1,一个求和方法在 try 片段完成,另一个求和方法再 catch 完成,我们可以粘贴这段代码在浏览器分别去掉不同的注释观察结果...多个 try catch,糟糕的是我们无法保证所有的 try catch 是不损害代码性能并且有意义的,这里面肯定会隐藏着很多上述类的 try catch 代码块。...当我们预感代码片段有可能出错,更应该是集中注意力去处理 success 和 error 的场景,而非使用 try catch 来保护我们的代码,更多时候 try catch 反而会让我们忽略了代码存在的致命问题...非异常路径不需要额外的 try catch,确保异常路径在需要考虑性能情况下优先考虑 if else,不考虑性能情况请君随意,而异步可以考虑回调函数返回 error 信息对其处理或者使用 Promse.reject

    92620

    替代try catch处理异常的优雅方式

    软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的try {…} catch {…} finally {…} 代码块,不仅有大量的冗余代码...也可以定义个类似BaseController的基类,这种做法虽然没错,但因为这样的代码有一定的侵入性和耦合性,万一已经继承其他基类了呢。...借助该注解,我们可以实现:在独立的某个地方,比如单独一个类,定义一套对各种异常的处理机制,然后在类的签名加上注解@ControllerAdvice,统一对 不同阶段的、不同异常 进行处理。...,其实Assert.notNull()的源码部分也是用的第二种写法。...另外,当需要考虑国际化的时候,捕获异常后的异常信息一般不能直接返回,需要转换成对应的语言,不过本文已考虑到了这个,获取消息的时候已经做了国际化映射,逻辑如下:

    99830

    try catch引发的性能优化深度思考

    今天在优化代码的时候发现了一段代码运行时候极其缓慢,从而引发了我对 try catch 的性能优化深度思考? 关键代码拆解成如下图所示(无关部分已省略): ?...上面的 getRowDataItemNumberFormattry catch2 函数示例显示的循环,如果里面所需的属性不存在,则该循环可能引发多个异常,为此性能更优的写法应该如下: ?...事实上 plus1 和 plus2 函数的代码逻辑是一致的,只有代码语义是不相同,一个是返回 1,另一个是错误抛出 1,一个求和方法在 try 片段完成,另一个求和方法再 catch 完成,我们可以粘贴这段代码在浏览器分别去掉不同的注释观察结果...我们发现 try 片段中的代码运行大约使用了 0.1 ms,而 catch 完成同一个求和逻辑却执行了大约 6 ms,这符合我们上面代码观察的预期,如果把计算范围继续加大,那么这个差距将会更加明显,实测如果计算...非异常路径不需要额外的 trycatch,确保异常路径在需要考虑性能情况下优先考虑 ifelse,不考虑性能情况请君随意,而异步可以考虑回调函数返回 error 信息对其处理或者使用 Promse.reject

    2.8K73

    Java 中的 try catch 影响性能吗?

    前几天在 code review 时发现有一段代码中存在滥用try catch的现象。其实这种行为我们也许都经历过,刚参加工作想尽量避免出现崩溃问题,因此在很多地方都想着 try catch一下。...但实际上这种习惯不仅会让代码很难看,更会影响代码的运行性能。有些人会觉得,不就是一个 try catch 么,怎么会影响性能啊。那就让我们来测试看看吧。...实验 首先,我们看看没有try-catch情况下,进行100万次加法的耗时: long start = System.nanoTime(); int a = 0; for (int i = 0; i try catch没有抛出异常,那么其对性能几乎没有影响。但如果抛出异常,那对程序将造成几百倍的性能影响。 结论 虽然在没有抛出异常时,try catch几乎没有性能影响。...但是一旦抛出异常,那么其对性能的影响将是巨大的。因此我们在实际编程的时候,需要特别注意try catch语句的使用,不在没有必要的地方过多使用。

    3.1K30
    领券