2016 - 2024

感恩一路有你

java内存溢出排查 java线程死锁和内存溢出,该怎么解决?

浏览量:1096 时间:2021-04-07 02:28:36 作者:admin

java线程死锁和内存溢出,该怎么解决?

java线程死锁或者线程数过高的:

1、获取java的进程ID

ps -ef|grep java

2、导出线程堆栈(其中32494换为上一个步骤查询到的进程ID)

jstack -l 32494 >> /usr/local/Client/log20180116.log

3、将上一个步骤生成导出.log 文件拷贝到本机,然后用记事本打开,检查哪个线程有大量的重复,之后再结合业务进行排除。(比如如果60%都是其中某个类的某个方法引起的堆栈,则很有可能是这个方法阻塞了)

java中while(true)死循环会造成JVM内存溢出吗?

1、把局部变量定义在死循环里面会造成栈溢出,诸如下面的定义:

while(true){

int x=1;

int arr[]= new int[10];

}

因为栈空间存储局部变量、参数等对象,栈是有默认深度的,我记得是128M(记忆问题,错了请指出)。

2、把对象定义在起循环里面会产生堆内存溢出,诸如下列定义:

while(true){

Person p = new Person()

}

对象的生成是占时间和空间的,因为你的内存空间有限,早晚会产生堆空间内存溢出。

所以大家写代码要养成良好习惯,不在特殊情况下,不要把局部变量和对象定义在循环里面。

java内存溢出排查 Java堆内存 java堆空间

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。