java 为什么会内存溢出怎么解决 tomcat启动内存溢出?

[更新]
·
·
分类:互联网
2455 阅读

java 为什么会内存溢出怎么解决

tomcat启动内存溢出?

tomcat启动内存溢出?

你用的是eclipse内置的tomcat还是本地的tomcat 内置的话,改下eclipse的内存大小,修改ini文件和window—preferences—tomcat—JDK下的内容。
本地的话JAVA_OPTS#34-server -XX:PermSize64M -XX:MaxPermSize128m放到第一行就行

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

java线程死锁或者线程数过高的:
1、获取java的进程ID
ps -ef|grep java
2、导出线程堆栈(其中32494换为上一个步骤查询到的进程ID)
jstack -l 32494 gtgt /usr/local/Client/log20180116.log
3、将上一个步骤生成导出.log 文件拷贝到本机,然后用记事本打开,检查哪个线程有大量的重复,之后再结合业务进行排除。(比如如果60%都是其中某个类的某个方法引起的堆栈,则很有可能是这个方法阻塞了)

java栈内存溢出怎么产生?

栈溢出有两种,一种是stackoverflow,另一种是outofmemory,前者一般是因为方法递归没终止条件,后者一般是方法中线程启动过多。

Java里还有大约20%可用内存的情况下显示内存溢出,是怎么回事?应该怎么办?

JVM中的内存和计算机的内存不是一回事,JVM(JAVA虚拟机)只是运行在服务器中的一个进程,只占用一部分的内存,其中堆通常占了整个jvm内存的80%!
假设一下,计算机是8G内存只给jvm分配了4G内存,jvm占用了4G内存之后,虽然整个内存才使用50%(忽略其他的),jvm也将发生内存溢出!
jvm内存溢出有哪些可能情况呢?
①,堆溢出:堆用来存储实例对象!
可能原因一:设置的最大堆内存太小!解决方案:通过设置-Xmx调大最大堆内存!
可能原因二:循环创建对象导致对象来不及回收!解决方案:优化代码!
②,栈溢出:栈主要用来存放对象引用!
可能原因:递归调用方法等容易出现栈溢出!
解决方法:优化代码!
③,方法区溢出:通常是因为加载了大量的Class,jar等!
通常不会溢出,使用-XX:Permsize设置合适的永久代!
发现内存溢出之后,可使用jstamp,MAT JAVA等进行内存分析
一直在持续分享JAVA方面的技术,有需要的朋友敬请关注。。