java内存溢出(二)
一、有哪些内存溢出异常?
OutOfMemoryError:
当堆、栈(多线程场景)、方法区(永久区)、本地内存(元数据、直接内存),数据容量达到最大时产生
StackOverFlowError:
线程请求的栈深度大于虚拟机栈允许的最大深度(默认1MB)时产生

二、堆溢出产生原因及解决方法?
产生原因:
不停的创建对象或对象占用空间特别大,在对象数量达到堆最大容量时产生OutOfMemoryError
解决方法:
使用-XX:+HeapDumpOnOutOfMemoryError,可以让java虚拟机在出现内存溢出时,产生当前堆内存快照以便进行异常分析,主要分析哪些对象占用了内存
代码示例:
import java.util.ArrayList;
import java.util.List; /**
* 描 述:堆内存溢出
* 作 者:潇邦
*/
public class HeapOOM { public static void main(String[] args) {
int i = 0;
List<String> list = new ArrayList<>();
while (true) {
list.add("abc");
i++;
}
} }
三、栈溢出产生原因及解决方法?
产生原因:
线程请求的栈深度大于虚拟机允许的最大深度,将抛出StockOverFlowError
多线程环境虚拟机栈在扩展时无法申请到足够内存空间,将抛出OutOfMemoryError
解决方法:
StockOverFlowError:一般函数层级过多导致,如死循环、死递归
OutOfMemoryError:一般多线程环境产生才会产生,一般用减少内存的方法,即减少栈容量来换取更多线程。
该参数可以设置栈容量(-XX:ThreadStackSize=512)
单线程栈代码示例:
/**
* 描 述:栈内存溢出StackOverflowError
* 作 者:潇邦
*/
public class StackOverFlow {
private int var; public void run() {
var++;
run();
} public static void main(String[] args) {
StackOverFlow stackOverFlow = new StackOverFlow();
try {
stackOverFlow.run();
} catch (Exception e) {
System.out.println("Exception-栈深度:" + stackOverFlow.var);
e.printStackTrace();
} catch (Error e) {
System.out.println("Error-栈深度:" + stackOverFlow.var);
e.printStackTrace();
}
}
}多线程栈代码示例:
/**
* 描 述:多线程环境栈引发OutOfMemoryError
* 作 者:潇邦
*/
public class StackOom { public void call() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} public void stackLeakByThread() {
while (true) {
new Thread(new Runnable() {
public void run() {
call();
}
}).start();
}
} public static void main(String[] args) {
StackOom soed = new StackOom();
soed.stackLeakByThread();
}
}
java内存溢出(二)的更多相关文章
- java内存溢出分析(二)
我们继续java内存溢出分析(一)的分析,点击Details>按钮,显示如下图,我们发现有一个对象数量达到280370216个,再点击其中的List objects 点击后,显示下图 至此,我们 ...
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
最近老是遇见服务器内存溢出的问题,故在网上搜了搜,总结了一些java内存溢出的解决方式 java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都 ...
- Java内存溢出详解
转自:http://elf8848.iteye.com/blog/378805 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap ...
- Java内存溢出的详细解决方案
本文介绍了Java内存溢出的详细解决方案.本文总结内存溢出主要有两种情况,而JVM经常调用垃圾回收器解决内存堆不足的问题,但是有时仍会有内存不足的错误.作者分析了JVM内存区域组成及JVM设置虚拟内存 ...
- java内存溢出的解决思路
原文地址:https://www.cnblogs.com/200911/p/3965108.html 内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能 ...
- java内存溢出怎么解决
java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的原因大都出于以下原因:JVM内存过小.程序不严密,产生了过多的垃圾. 导致OutOfMemory ...
- [转]Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
原文地址: http://outofmemory.cn/c/java-outOfMemoryError java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生 ...
- [转]Java内存溢出详解及解决方案
原文地址:http://blog.csdn.net/xianmiao2009/article/details/49254391 内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是 ...
- Java基础学习总结(30)——Java 内存溢出问题总结
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...
- Java 内存溢出分析
原文地址:Java 内存溢出分析 博客地址:http://www.moonxy.com 一.前言 Java 的 JVM 的内存一般可分为 3 个区:堆(heap).栈(stack)和方法区(metho ...
随机推荐
- iOS体会篇 大学编程到公司的过程
原文作者:朱众 授权本技术博文转载. 刚进公司时,在你正式动手写代码前,很可能要理解code base.这一过程至少持续1个月,取决于你所在项目的规模.你会发现你不得不使用你浑身所学之能事,理解上古程 ...
- Chapter 3 Protecting the Data(4):创建和使用应用程序角色
原文出处:http://blog.csdn.net/dba_huangzj/article/details/39927713,专题目录:http://blog.csdn.net/dba_huangzj ...
- ios swift模仿qq登陆界面,xml布局
给大家推荐两个学习的地址: 极客学院的视频:http://www.jikexueyuan.com/path/ios/ 一个博客:http://blog.csdn.net/lizhongfu2013/a ...
- java Domj4读取xml文件
先概括,再以代码形式给出. 获取节点: Iterator Element.nodeIterator(); //获取当前标签节点下的所有子节点 获取 标签: Element Document.get ...
- Gradle 1.12翻译——第二十章. 构建环境
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- 《java入门第一季》之正则表达式常见规则
正则表达式规则不用记住,只是知道是做什么用的即可.常见规则如下: A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') (\\n来表示换行) ...
- my project 中git使用过程(基本操作流程)
1.g it clone git@name:server/BM/APPS.git 则BM_APPS.git项目被下载到当前目录下了,这时git@name:server/BM/APPS.git就是自己 ...
- ARM-linux汇编常用语法
ARM linux常用汇编语法 ============================= 汇编语言每行的语法: lable: instruction ; comment 段操作: .section ...
- FFMPEG结构体分析:AVPacket
注:写了一系列的结构体的分析的文章,在这里列一个列表: FFMPEG结构体分析:AVFrame FFMPEG结构体分析:AVFormatContext FFMPEG结构体分析:AVCodecConte ...
- ORM对象关系映射之GreenDAO源码解析
上一篇我们学习了GreenDAO的CRUD基本操作,可以说是非常的方便的,而且GreenDAO的效率和性能远远高于其它两款流行的ORM框架,下面是我从官网找的一副它们三个ORM框架之间的性能测试的直观 ...