JVM内存分析系列(二)内存溢出的类型分析

标签: jvm 内存 分析 | 发表时间:2013-12-24 23:54 | 作者:85977328
出处:http://www.iteye.com
Java堆溢出
虚拟机栈和本地方法栈溢出
运行时常量池溢出
方法区溢出
本机直接内存溢出


package com.chinaso.phl;

import java.lang.reflect.Field;

/**
 * @author piaohailin
 * @date   2013-12-24
*/
public class Server {
    private int stackLength = 1;

    public void stackLeak() {
        stackLength++;
        stackLeak();
    }

    /**
     * @param args
     * @author piaohailin
     * @throws Throwable 
     * @date   2013-12-24
    */
    public static void main(String[] args) throws Throwable {

        //1 Java堆溢出
        //      List<Server> list = new ArrayList<Server>();
        //      while (true) {
        //          list.add(new Server());
        //      }

        //2 虚拟机栈和本地方法栈溢出
        //        Server s = new Server();
        //        try {
        //            s.stackLeak();
        //        } catch (Throwable t) {
        //            System.out.println("stack length:" + s.stackLength);
        //            throw t;
        //        }

        //3 运行时常量池溢出 
        //        List<String> list = new ArrayList<String>();
        //        int i = 0;
        //        while (true) {
        ////          list.add(String.valueOf(i++).intern());
        //            list.add(new String(String.valueOf(i++)));
        //        }

        //4 方法区溢出 
        //        while (true) {
        //            Enhancer enhancer = new Enhancer();
        //            enhancer.setSuperclass(OOMObject.class);
        //            enhancer.setUseCache(false);
        //            enhancer.setCallback(new MethodInterceptor() {
        //                @Override
        //                public Object intercept(Object obj,
        //                                        Method method,
        //                                        Object[] args,
        //                                        MethodProxy proxy) throws Throwable {
        //                    return proxy.invokeSuper(obj, args);
        //                }
        //            });
        //            enhancer.create();
        //        }

        //5 本机直接内存溢出
        Field unsafeField = sun.misc.Unsafe.class.getDeclaredFields()[0];
        unsafeField.setAccessible(true);
        sun.misc.Unsafe unsafe = (sun.misc.Unsafe) unsafeField.get(null);
        while (true) {
            unsafe.allocateMemory(1024 * 1024);
        }
    }

    static class OOMObject {
    }
}



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [jvm 内存 分析] 推荐:

jvm内存映像分析

- - ITeye博客
     jdk自带的jmap就是java内存映像工具,可以用于上生成堆转储快照:. 在eclipse中启动一个java类,打开jdk安装目录下的C:\Program Files\Java\jdk1.6.0_11\bin目录,双击jconsole.exe,显示连接窗口:.  ,单击pid为6920的选项,点连接进入,可以看到jvm运行时的多种参数,.

MAT JVM内存分析

- - 开源软件 - ITeye博客
我们使用的是 Eclipse Memory Analyzer V0.8,Sun JDK 6. 和其他插件的安装非常类似,MAT 支持两种安装方式,一种是“单机版“的,也就是说用户不必安装 Eclipse IDE 环境,MAT 作为一个独立的 Eclipse RCP 应用运行;另一种是”集成版“的,也就是说 MAT 也可以作为 Eclipse IDE 的一部分,和现有的开发平台集成.

Linux与JVM的内存关系分析

- - 美团技术团队
在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m. 从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用了),如下图所示. 同时,由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了.

JVM 堆外内存泄漏分析(一)

- - coderbee笔记
Java 应用部署在 Kubernetes 集群里,每个容器只运行一个进程, JVM 的启动命令是打包在镜像文件里的. 常规的方式是采用 -Xmx4g -Xms2g 这样的参数来指定 JVM 堆的最大、最小尺寸,如果需要调整堆大小就需要重新打包镜像. 为了避免因为修改堆大小而重新打包,从 JDK 8u191 版本开始支持 JVM 感知容器资源限制,这样在调整 JVM 内存分配时就不需要重新打包镜像文件,采用下面的参数来使 JVM 在启动时感知到容器的资源限制,并设定堆的大小:.

JVM 堆外内存泄漏分析(二)

- - coderbee笔记
关于 堆外内存的组成可以看上一篇文章 JVM 堆外内存泄漏分析(一). NMT(Native Memory Tracking)是 HotSpot JVM 引入的跟踪 JVM 内部使用的本地内存的一个特性,可以通过 jcmd 工具访问 NMT 数据. NMT 目前不支持跟踪第三方本地代码的内存分配和 JDK 类库.

JVM内存溢出深度分析分析

- - CSDN博客研发管理推荐文章
今天,发现游戏逻辑服务器内存溢出问题,每隔一定时间就生成java_pidxxxxxx.hprof ,基本1G内存分配不够用了,导致FGC频繁发生. MAT  Eclipse Memory Analyzer Tool(MAT)分析内存泄漏. MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗.

JVM内存分析系列(二)内存溢出的类型分析

- - 企业架构 - ITeye博客
//2 虚拟机栈和本地方法栈溢出. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

JVM内存分配

- - 移动开发 - ITeye博客
计算机内存,它算是CPU与计算机打交道最频繁的区域,所有数据都是先经过硬盘至内存,然后由CPU再从内存中获取数据进行处理,又将数据保存到内存,通过分页或分片技术将内存中的数据再flush至硬盘. 那JVM的内存结构到底是如何呢. JVM做为一个运行在操作系统上,但又独立于os运行的平台,它的内存至少应该包括象寄存器、堆栈等区域.

JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇

- - 掘金后端本月最热
注:本文原创,转发需标明作者及原文链接. 【0广告微信公众号:Q的博客】. 本系列共三篇文章, 本文是系列第2篇——进阶篇,详细讲解 MAT 各种工具的 核心功能、用法、适用场景,并在具体实战场景下讲解帮大家学习如何针对各类内存问题. JVM 内存分析工具 MAT 的深度讲解与实践——入门篇》 介绍 MAT 产品功能、基础概念、与其他工具对比、Quick Start 指南.

一次大量 JVM Native 内存泄露的排查分析(64M 问题)

- - 掘金后端本月最热
我们有一个线上的项目,刚启动完就占用了使用 top 命令查看 RES 占用了超过 1.5G,这明显不合理,于是进行了一些分析找到了根本的原因,下面是完整的分析过程,希望对你有所帮助. Linux 经典的 64M 内存问题. 堆内存分析、Native 内存分析的基本套路. tcmalloc、jemalloc 在 native 内存分析中的使用.