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

7 段代码,玩转Java程序常见崩溃场景!

Java程序是基于GC,在启动初始,就申请了足量内存池,再加上JIT等编译器实时优化,速度并不比直接用C++语言写慢。...最近在看RCA(Root Cause Analysis)东西,不小心发现了yCrash这么个东西。它几段问题代码非常典型,我们可以稍微看一下,来看看Java应用程序常见几个崩溃场景。...java.lang.OutOfMemoryError: unable to create new native thread 5.死锁 死锁代码一般不会发生,但一旦发生还是非常严重,相关业务可能就跑不动了...下面是一个简单模拟栈溢出代码,只需要递归调用就可以了。...如果CPU资源还有剩余,可以尝试着增加请求线程数,比如tomcat最大线程数。 End 以上就是对于Java常见故障几段代码分析,大部分故障都逃不出这些场景。

46720

7 段代码,玩转Java程序常见崩溃场景!

Java程序是基于GC,在启动初始,就申请了足量内存池,再加上JIT等编译器实时优化,速度并不比直接用C++语言写慢。...最近在看RCA(Root Cause Analysis)东西,不小心发现了yCrash这么个东西。它几段问题代码非常典型,我们可以稍微看一下,来看看Java应用程序常见几个崩溃场景。...java.lang.OutOfMemoryError: unable to create new native thread 5.死锁 死锁代码一般不会发生,但一旦发生还是非常严重,相关业务可能就跑不动了...下面是一个简单模拟栈溢出代码,只需要递归调用就可以了。...如果CPU资源还有剩余,可以尝试着增加请求线程数,比如tomcat最大线程数。 End 以上就是对于Java常见故障几段代码分析,大部分故障都逃不出这些场景。

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

    Java常见几大代码

    下面这段代码示例了如何正确访问一个非静态成员变量。其方法就是首先实例化一个对象。...举个例子,在你代码加上try{}catch{},去试着捕捉任何一场抛出,并打印出错误信息。你不用为每个异常都写出定制处理(虽然这是一个很好编程习惯)。...而这样会是他们应用程序或者是应用程序发生线程冲突。当两个或者两个以上线程访问同一个数据时候,就存在一定概率(概率大小取决于墨菲法则)使得两个线程同时访问或者修改同一个数据。...这样问题不是仅仅出现在多线程应用程序或者是应用程序中。如果你写了java api 或者是java bean,你代码就很可能不是线程安全。...另外原因可能是你在初始化对象时候不规范,或者是它初始化是有条件。举例,检查下面的代码,看看你是否能发现这个错误。

    41430

    8种常见Java不规范代码

    在工作上,我最近对一个现有的Java项目代码进行了清理。完成之后,我发现了一些反复出现不规范代码。所以,我把它们整理成了一个列表出来分享给我同行希望能引起注意并改善代码质量和可维护性。...在Eclipse中格式化源代码并管理import语句 Eclipse提供了自动格式化源代码和管理import语句功能(并移除未使用语句)。你可以使用下面的快捷键来使用这些功能。...要做到这个,在Eclipse中,到 Window -> Preferences -> Java -> Editor -> Save Actions并启用 Perform the selected actions...在代码块周围使用大括号: 永远不要忘记在块类型语句(如:if,for,while)周围使用大括号。这可以减少代码歧义并且避免在你修改代码时候产生新bug。 不推荐 ?...为程序员提供最优质博文、最精彩讨论、最实用开发资源;提供最新最全编程学习资料:PHP、Objective-C、Java、Swift、C/C++函数库、.NET Framework类库、J2SE

    86830

    8种常见Java不规范代码

    在工作上,我最近对一个现有的Java项目代码进行了清理。完成之后,我发现了一些反复出现不规范代码。所以,我把它们整理成了一个列表出来分享给我同行希望能引起注意并改善代码质量和可维护性。...在Eclipse中格式化源代码并管理import语句 Eclipse提供了自动格式化源代码和管理import语句功能(并移除未使用语句)。你可以使用下面的快捷键来使用这些功能。...要做到这个,在Eclipse中,到 Window -> Preferences -> Java -> Editor -> Save Actions并启用 Perform the selected actions...在代码块周围使用大括号: 永远不要忘记在块类型语句(如:if,for,while)周围使用大括号。这可以减少代码歧义并且避免在你修改代码时候产生新bug。 不推荐 ?...为程序员提供最优质博文、最精彩讨论、最实用开发资源;提供最新最全编程学习资料:PHP、Objective-C、Java、Swift、C/C++函数库、.NET Framework类库、J2SE

    76010

    Java中关于interface常见技巧

    Java 程序员都知道要面向接口编程,那 Java接口除了定义接口方法之外还能怎么用你知道吗?今天我们就来看一下 Java接口还可以有哪些用法。...,我们只需要增加一个默认方法,然后在需要使用实现类中进行实现或者使用就可以了,其他实现类不需要改动任何代码。...标记接口还有一个很常见功能那就是标记功能,这么说可能你没有印象,但是到提到序列化接口 java.io.Serializable; 你肯定知道,我们经常在对应 POJO 中都会实现这个序列化接口,而这个序列化接口如果看过源码小伙伴肯定知道里面是没有内容...静态方法跟默认方法一样,JDK 8 还支持在接口中增加静态方法,虽然说在接口中定义静态方法做法不常见,但是当需要使用时候也是可以支持,避免在创建一个单独工具类,跟在类中定义静态方法一样,我们可以直接通过接口名称引用静态方法...,在 JDK 9 中接口支持私有方法,主要用于不同非抽象方法中共享代码

    39651

    Java代码常见十种错误

    每一个程序员在编写代码过程中都免不了出现错误或是失误,这些小错误和失误往往使得程序员还得返工。那么,如何才能尽量避免这些错误发生呢?...笔者总结只有在日常编写代码中总结出经验,在这篇文章中,笔者列出了10个Java编程中常见错误,你可以把这些错误添加到你代码审查检查列表中,这样在经过代码审查后,你可以确信你代码中不再存在这类错误了...  ·String   ·大部分Exception子类   四、常见错误4:自编代码来拷贝数组   Java允许你克隆数组,但是开发者通常会错误地编写如下代码,问题在于如下循环用三行做事情,...七、常见错误7:用== 替代.equals   在Java中,有两种方式检查两个数据是否相等:通过使用==操作符,或者使用所有对象都实现.equals方法。...八、常见错误8:混淆原子操作和非原子操作   Java保证读和写32位数或者更小值是原子操作,也就是说可以在一步完成,因而不可能被打断,因此这样读和写不需要同步。

    82420

    案例分析:常见Java代码优化法则

    对于 Java 语言来说,也有它一套优化法则,这些细微性能差异,经过多次调用和迭代,会产生越来越大影响。 今天我们一起看看一些常用代码优化法则,从而在编码中保持好习惯,让代码保持最优状态。...如下面的代码,list 可能会出现数组越界异常。是否越界是可以通过代码提前判断,而不是等到发生异常时去捕捉。提前判断这种方式,代码会更优雅,效率也更高。...我这里选用是 ragel,你也可以使用类似 javacc 或者 antlr 之类工具。它通过语法解析和简单正则表达式,最终可以生成 Java 语法代码。...ragel -G2 -J -o P.java P.rl 完整代码有点复杂,我已经放到了仓库中,你可以实际分析一下。 我们来看一下它性能。...小结 此外,学习 Java 规范,你还可以细读《阿里巴巴 Java 开发规范》,里面也有很多有意义建议。 其实语言层面的性能优化,都是在各个资源之间权衡(比如开发时间、代码复杂度、扩展性等)。

    9810

    8种常见Java不规范代码

    在工作上,我最近对一个现有的Java项目代码进行了清理。完成之后,我发现了一些反复出现不规范代码。所以,我把它们整理成了一个列表出来分享给我同行希望能引起注意并改善代码质量和可维护性。...在Eclipse中格式化源代码并管理import语句 Eclipse提供了自动格式化源代码和管理import语句功能(并移除未使用语句)。你可以使用下面的快捷键来使用这些功能。...要做到这个,在Eclipse中,到 Window -> Preferences -> Java -> Editor -> Save Actions并启用 Perform the selected actions...在代码块周围使用大括号: 永远不要忘记在块类型语句(如:if,for,while)周围使用大括号。这可以减少代码歧义并且避免在你修改代码时候产生新bug。 不推荐 ?...猿圈 (ID: CodePush )(←长按复制) 为程序员提供最优质博文、最精彩讨论、最实用开发资源;提供最新最全编程学习资料:PHP、Objective-C、Java、Swift、C/C

    56010

    Java 常见内存溢出异常与代码实现

    Java 堆 OutOfMemoryError Java 堆是用来存储对象实例, 因此如果我们不断地创建对象, 并且保证 GC Root 和创建对象之间有可达路径以免对象被垃圾回收, 那么当创建对象过多时...Java 栈 StackOverflowError 我们知道, JVM 运行时数据区中有一个叫做 虚拟机栈 内存区域, 此区域作用是: 每个方法在执行时都会创建一个栈帧, 用于存储局部变量表, 操作数栈...运行时常量池溢出 在 Java 1.6 以及之前 HotSpot JVM 版本时, 有永久代概念, 即 GC 分代收集机制是扩展至方法区....我们通过 JDK1.6 编译并运行上面的代码, 会有如下输出: ? 需要注意是, 如果通过 JDK1.8 来编译运行上面代码的话, 会有如下警告, 并且不会产生任何异常: ?...此例子代码部分没有改动, 唯一区别是我们需要使用 JDK8 来运行这段代码, 并且设着参数 -XX:MaxMetaspaceSize=10M, 这个参数告诉 JVM Metaspace 最大大小是

    79030

    Java面试之常见HTTP错误代码

    常考: 200 - 服务器成功返回网页 404 - 请求网页不存在 503 - 服务不可用 1xx(临时响应)表示临时响应并需要请求者继续执行操作状态代码。...代码 说明 100 (继续) 请求者应当继续提出请求。服务器返回此代码表示已收到请求第一部分,正在等待其余部分。...2xx (成功)表示成功处理了请求状态代码代码 说明 200 (成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求网页。...303 (查看其他位置) 请求者应当对不同位置使用单独 GET 请求来检索响应时,服务器返回此代码。 304 (未修改) 自从上次请求后,请求网页未修改过。...代码 说明 500 (服务器内部错误) 服务器遇到错误,无法完成请求。 501 (尚未实施) 服务器不具备完成请求功能。例如,服务器无法识别请求方法时可能会返回此代码

    1.2K30

    Java 常见内存溢出异常与代码实现

    Java 堆 OutOfMemoryError Java 堆是用来存储对象实例, 因此如果我们不断地创建对象, 并且保证 GC Root 和创建对象之间有可达路径以免对象被垃圾回收, 那么当创建对象过多时...Java 栈 StackOverflowError 我们知道, JVM 运行时数据区中有一个叫做 虚拟机栈 内存区域, 此区域作用是: 每个方法在执行时都会创建一个栈帧, 用于存储局部变量表, 操作数栈...运行时常量池溢出 在 Java 1.6 以及之前 HotSpot JVM 版本时, 有永久代概念, 即 GC 分代收集机制是扩展至方法区....我们通过 JDK1.6 编译并运行上面的代码, 会有如下输出: ? 需要注意是, 如果通过 JDK1.8 来编译运行上面代码的话, 会有如下警告, 并且不会产生任何异常: ?...此例子代码部分没有改动, 唯一区别是我们需要使用 JDK8 来运行这段代码, 并且设着参数 -XX:MaxMetaspaceSize=10M, 这个参数告诉 JVM Metaspace 最大大小是

    92520

    Java 常见内存溢出异常与代码实现

    Java 堆 OutOfMemoryError Java 堆是用来存储对象实例, 因此如果我们不断地创建对象, 并且保证 GC Root 和创建对象之间有可达路径以免对象被垃圾回收, 那么当创建对象过多时...下面是具体代码: /** * @author xiongyongshun * VM Args: java -Xss64k */ public class OutOfMemoryErrorTest...在方法区中, 有一部分内存是用于存储常量池, 因此如果代码中常量过多时, 就会耗尽常量池内存, 进而导致内存溢出.那么如何添加大量常量到常量池呢?...(RuntimeConstantPoolOOMTest.java:16) 需要注意是, 如果通过 JDK1.8 来编译运行上面代码的话, 会有如下警告, 并且不会产生任何异常: >>> java..., 唯一区别是我们需要使用 JDK8 来运行这段代码, 并且设着参数 -XX:MaxMetaspaceSize=10M, 这个参数告诉 JVM Metaspace 最大大小是 10M.

    75280

    Java常见

    Java常见类 ▐ Object类 (1)基本概念 java.lang.Object类是Java类层次结构根类,所有类都是该类直接或间接子类。...int hashCode() - 用于获取调用对象哈希码值(内存地址编号). -若两个对象调用equals方法相等,各自调用hashCode方法结果必须相同。...String toString() - 用于返回调用对象字符串形式。 - 该方法默认返回字符串:包名.类名@哈希码十六进制形式。 - 为了返回更有意义数据,则需要重写该方法。...- 使用print或println打印引用时或字符串连接引用时都会自动调用toString 图例: ▐ 包装类 (1)基本概念 java.lang.Integer类内部采用int类型变量作为成员变量进行包装...笔试题) 在Integer类内部提供了一个自动装箱池,将-128到127之间所有整数提前装箱完毕,当程序中使用该范围数据进行装箱时则直接使用池中对象即可,从而提高了效率 ▐ String

    12610

    提高千倍效率 Java 代码技巧

    代码优化也是一样,如果项目着眼于尽快无 BUG 上线,那么此时可以抓大放代码细节可以不精打细磨;但是如果有足够时间开发、维护代码,这时候就必须考虑每个可以优化细节了,一个一个细小优化点累积起来...代码优化目标是: 减小代码体积 提高代码运行效率 代码优化细节 1、尽量指定类、方法final修饰符 带有 final 修饰符类是不可派生。...在 Java 核心 API 中,有许多应用 final 例子,例如 java.lang.String,整个类都是 final 。...如果指定了一个类为 final,则该类所有的方法都是 final Java 编译器会寻找机会内联所有的 final 方法,内联对于提升 Java 运行效率作用重大,具体参见 Java 运行期优化。...28、字符串变量和字符串常量equals时候将字符串常量写在前面 这是一个比较常见技巧了,如果有以下代码: String str = "123"; if (str.equals("123")) {

    33430

    提高千倍效率 Java 代码技巧

    代码优化也是一样,如果项目着眼于尽快无 BUG 上线,那么此时可以抓大放代码细节可以不精打细磨;但是如果有足够时间开发、维护代码,这时候就必须考虑每个可以优化细节了,一个一个细小优化点累积起来...代码优化目标是: 减小代码体积 提高代码运行效率 代码优化细节 1、尽量指定类、方法final修饰符 带有 final 修饰符类是不可派生。...在 Java 核心 API 中,有许多应用 final 例子,例如 java.lang.String,整个类都是 final 。...如果指定了一个类为 final,则该类所有的方法都是 final Java 编译器会寻找机会内联所有的 final 方法,内联对于提升 Java 运行效率作用重大,具体参见 Java 运行期优化。...28、字符串变量和字符串常量equals时候将字符串常量写在前面 这是一个比较常见技巧了,如果有以下代码: String str = "123"; if (str.equals("123")) {

    31720

    聊聊Java代码优化30个技巧

    前言 我之前写过两篇关于优化相关问题:《聊聊sql优化15个技巧》和《聊聊接口性能优化11个技巧》,发表之后,在全网受到广大网友好评。阅读量和点赞率都很高,说明了这类文章价值。...今天接着优化这个话题,我们一起聊聊Java代码优化30个技巧,希望会对你有所帮助。...虽说mapkey存在hash冲突情况,但遍历存放数据链表或者红黑树时间复杂度,比遍历整个list集合要很多。...14.不用数据及时清理 在Java中保证线程安全技术有很多,可以使用synchroized、Lock等关键字给代码块加锁。 但是它们有个共同特点,就是加锁会对代码性能有一定损耗。...说实话,Java代码优化是一个比较大的话题,它里面可以优化点非常多,我没办法一一列举完。在这里只能抛砖引玉,介绍一下比较常见知识点,更全面的内容,需要小伙伴们自己去思考和探索。

    1.3K20

    提高千倍效率 Java 代码技巧

    代码优化也是一样,如果项目着眼于尽快无 BUG 上线,那么此时可以抓大放代码细节可以不精打细磨;但是如果有足够时间开发、维护代码,这时候就必须考虑每个可以优化细节了,一个一个细小优化点累积起来...代码优化目标是: 减小代码体积 提高代码运行效率 代码优化细节 1、尽量指定类、方法final修饰符 带有 final 修饰符类是不可派生。...在 Java 核心 API 中,有许多应用 final 例子,例如 java.lang.String,整个类都是 final 。...如果指定了一个类为 final,则该类所有的方法都是 final Java 编译器会寻找机会内联所有的 final 方法,内联对于提升 Java 运行效率作用重大,具体参见 Java 运行期优化。...28、字符串变量和字符串常量equals时候将字符串常量写在前面 这是一个比较常见技巧了,如果有以下代码: String str = "123"; if (str.equals("123")) {

    59620

    Java反射常见用法

    反射常见用法有三类,第一类是“查看”,比如输入某个类属性方法等信息,第二类是“装载“,比如装载指定类到内存里,第三类是“调用”,比如通过传入参数,调用指定方法。...通过了第13行for循环依次输出了这些属性信息。具体来讲,通过第14行代码输出了该属性修饰符,通过第16行代码输出了该属性类型,通过第18行代码输出了该属性变量名。...可以说,Class类forName方法最常见用法就是装载数据库驱动,以至于不少人会错误地认为这个方法作用是“装载类”。...通过下面的ForClassDemo.java这段代码,我们来看下综合使用forName和newInstance这两个方法加载对象方式。...通过下面的CallFuncDemo.java代码,我们将通过反射来调用类里方法,在其中我们能看下上述三个问题解决方法。

    36910
    领券