(转)JVM各种内存溢出是否产生dump
对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件。但永久代内存溢出不明确是否会生成,今天来做一个实验:
永久代内存溢出,有dump文件。JVM的参数是-XX:PermSize=10m -XX:MaxPermSize=10m -XX:+HeapDumpOnOutOfMemoryError
- import java.util.ArrayList;
- import java.util.List;
- public class PermPoolOOM{
- public static void main(String[] args){
- List list = new ArrayList();
- int i = 0;
- while(true){
- list.add(String.valueOf(i++).intern());
- }
- }
- }
java.lang.OutOfMemoryError: PermGen space
Dumping heap to java_pid8900.hprof ...
Heap dump file created [17009938 bytes in 0.336 secs]
Exception in thread "main" java.lang.OutOfMemoryError: PermGen space
at java.lang.String.intern(Native Method)
at PermPoolOOM.main(PermPoolOOM.java:8)
方法区溢出,有dump文件。需要下载cglib-full-2.0.1.jar,JVM参数设置:-XX:PermSize=10m -XX:MaxPermSize=10m -XX:+HeapDumpOnOutOfMemoryError
- import java.lang.reflect.Method;
- import net.sf.cglib.proxy.Enhancer;
- import net.sf.cglib.proxy.MethodInterceptor;
- import net.sf.cglib.proxy.MethodProxy;
- public class JavaMethodAreaOOM {
- public static void main(String[] args) {
- while (true) {
- Enhancer enhancer = new Enhancer();
- enhancer.setSuperclass(OOMObject.class);
- enhancer.setUseCache(false);
- enhancer.setCallback(new MethodInterceptor() {
- public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
- return proxy.invokeSuper(obj, args);
- }
- });
- enhancer.create();
- }
- }
- static class OOMObject {
- }
- }
java.lang.OutOfMemoryError: PermGen space
Dumping heap to java_pid11000.hprof ...
Heap dump file created [6752989 bytes in 0.075 secs]
Exception in thread "main" net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException-->null
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:208)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:406)
at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:318)
at JavaMethodAreaOOM.main(JavaMethodAreaOOM.java:21)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:411)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:195)
... 3 more
Caused by: java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
... 8 more
直接内存溢出,没有dump文件。JVM参数配置:-XX:PermSize=10m -XX:MaxPermSize=10m -XX:+HeapDumpOnOutOfMemoryError -XX:MaxDirectMemorySize=10M
- import java.lang.reflect.Field;
- import sun.misc.Unsafe;
- public class DirectMemoryOOM{
- private static final int _1MB = 1024* 1024 * 1024;
- public static void main(String[] args) throws Exception{
- Field unsafeField = Unsafe.class.getDeclaredFields()[0];
- unsafeField.setAccessible(true);
- Unsafe unsafe = (Unsafe) unsafeField.get(null);
- while(true){
- //unsafe直接想操作系统申请内存
- unsafe.allocateMemory(_1MB);
- }
- }
- }
Exception in thread "main" java.lang.OutOfMemoryError
at sun.misc.Unsafe.allocateMemory(Native Method)
at com.comtop.DirectMemoryOOM.main(DirectMemoryOOM.java:15)
栈内存溢出,没有dump文件。JVM参数设置:-Xss128k
- public class JavaVMStackOF{
- int stackLength = 1;
- public void stackLeak(){
- stackLength++;
- stackLeak();
- }
- public static void main(String[] args){
- JavaVMStackOF oom = new JavaVMStackOF();
- oom.stackLeak();
- }
- }
Exception in thread "main" java.lang.StackOverflowError
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:6)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
at JavaVMStackOF.stackLeak(JavaVMStackOF.java:7)
(转)JVM各种内存溢出是否产生dump的更多相关文章
- 本地模拟内存溢出并分析Dump文件
java Dump文件分析 前言 dump文件是java虚拟机内存在某一时间点的快照文件,一般是.hprof文件,下面自己模拟一下本地内存溢出,生成dump文件,然后通过mat工具分析的过程. 配置虚 ...
- JVM:内存溢出OOM
JVM:内存溢出OOM 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 经典错误 JVM 中常见的两个 OOM 错误 StackoverflowError:栈溢出 ...
- Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread)
转载自https://github.com/pzxwhc/MineKnowContainer/issues/25 包括:1. 栈溢出(StackOverflowError)2. 堆溢出(OutOfMe ...
- Java8虚拟机(JVM)内存溢出实战
前言 相信很多JAVA中高级的同学在面试的时候会经常碰到一个面试题 你是如何在工作中对JVM调优和排查定位问题的? 事实上,如果用户量不大的情况下,在你的代码还算正常的情况下,在工作中除非真正碰到与J ...
- [JVM教程与调优] 了解JVM 堆内存溢出以及非堆内存溢出
在上一章中我们介绍了JVM运行时参数以及jstat指令相关内容:[JVM教程与调优] 什么是JVM运行时参数?.下面我们来介绍一下jmap+MAT内存溢出. 首先我们来介绍一下下JVM的内存结构. J ...
- 浅析软件测试人员如何对JVM进行内存溢出检测
一.什么是JVM,检测JVM的意义 JVM是java virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各 ...
- 对jvm虚拟机 内存溢出的思考
java内存溢出:当新产生对象时,新生代空间不够,导致无法申请到足够的空间,报内存溢出 内存泄漏:一些静态集合,静态常量没有被gc清理,越来越多,占用内存,最后导致无法申请到新的空间
- JVM虚拟机内存溢出垃圾收集及类加载机制总结
1.Java内存区域与内存溢出异常 虚拟机栈:为虚拟机执行Java方法服务 本地方法栈:为虚拟机使用到的native方法服务. Java堆:是Java虚拟机所管理的内存中最大的一块,被所有线程共享的一 ...
- JVM 发生内存溢出的 8 种原因、及解决办法
阅读本文大概需要 2.3 分钟. 出处:割肉机 cnblogs.com/williamjie/p/11164572.html Java 堆空间 GC 开销超过限制 请求的数组大小超过虚拟机限制 Per ...
随机推荐
- 51NOD 区间的价值 V2
http://www.51nod.com/contest/problem.html#!problemId=1674 因为题目要求的只是& 和 | 这两个运算.而这两个运算产生的值是有限的. & ...
- GIT主要用到的命令
git add . //添加到暂存盘 git commit -m ‘备注’//提交到本地仓库 git push //提交到远程仓库 fetch更新本地仓库两种方式: //方法一 $ git fetch ...
- azure powershell 获取可用镜像列表
通过Azure Powershell 指定location和Pbulishername 获取所有可用镜像的 publisherName,Offer,Skus,Version,location信息列表 ...
- ERwin DM Reverse Engineer 逆向工程介绍
介绍内容:利用ERwin DM进行对本地 Oracle 数据库的逆向工程 ERwin DM Version:7.3 ERwin DM 提供两种方式的逆向工程方法,分别是基于脚本文件和基于数据库. 下面 ...
- Centos 7 搭建git服务器及使用gitolite控制权限
一.安装git yum install git git --version #查看git版本 二.升级git(可选,如果之前已经安装git,需要升级git到最新版本) git clone https: ...
- 一键部署LNMP堆栈Web应用基础架构
https://market.azure.cn/Vhd/Show?vhdId=9852&version=10884 产品详情 产品介绍LEMP/LNMP 是指一组通常一起使用来运行动态网站或者 ...
- LoadRunner使用(1)
一.LoadRunner脚本录制 LoadRunner测试分为两个步骤: 第一步:录制脚本,其实就是监控并记录这段时间发送的HTTP请求 第二步:启动多个线程,用录制的脚本,模拟多线程发送请求. (1 ...
- 如何处理错误消息Please install the Linux kernel header files
Please install the Linux kernel "header" files matching the current kernel 当我启动minilkube时遇 ...
- Android(java)学习笔记134:Android数据存储5种方式总结
1.使用文件(File)存储 存储一般的数据 2.使用sharedperference(xml) 存储设置信息.配置信息.密码 3.数据库Sqlite 开源的,嵌入式的数据库,轻量级 4.使用Cont ...
- js原型,原型链的理解
1.所有引用类型(函数.数组.对象)都拥有_proto_属性(隐式原型) 2.所有函数拥有prototype属性(显式原型)(仅限函数) 3.原型对象:拥有prototype属性的对象,在定义函数时就 ...