搜索
写经验 领红包
 > 地理

java内存溢出的解决思路是什么(java内存溢出的解决思路和方法)

导语:Java内存溢出的解决思路

java内存溢出的解决思路是什么(java内存溢出的解决思路和方法)

作为一个Java开发工程师,在工作中基本上会遇到内存溢出问题。这里基于个人的经验和之前工作中遇到的实例,来总结一下子我自己的解决思路。

产生原因

内存溢出的产生原因大致分为三种:

一、对象使用完毕后未及时释放引用

二、应用处理过程需要使用大量内存

三、栈溢出等

解决方法

一、针对对象未及时释放的问题,可以在内存攀升时使用一些java自带的命令先查看对象数量,然后主动触发gc,再次查看对象数量,通过对比两次的对象数据就可以看出来。

命令:

jmap -histo

jmap -histo:live

二、程序运行时需要使用大量内存,这种情况一般是和并发一起的。如果是单个线程,需要大量内存,在程序开发阶段基本上就可以发现。实际情况是:如果一个线程需要20M,20个线程就需要400M。这种情况下就需要分析一些涉及大量对象创建和数据查询的操作,这些操作最容易产生,最容易需要使用大量的内存。如果这些操作比较耗时,同时并发量又比较大,就会出现多个线程,都需要申请大量内存空间,进而导致内存不足。

我自己年前遇到的就是这个问题。解决这个问题,主要是排查耗时比较长的操作,以及需要进行数据查询和大量对象创建的操作。

三、栈溢出主要是死循环等条件判断引起的,解决方法主要是看日志

总结

以上是一些简单的分析思路,具体的操作,我怎么判断一个任务需要等内存大小,我会整理好后发出来

本文内容由小茹整理编辑!