首页 > 系统相关 >写程序分析堆内存溢出和栈内存溢出

写程序分析堆内存溢出和栈内存溢出

时间:2023-04-23 13:40:29浏览次数:34  
标签:dump jar 程序 线程 内存 public 溢出


打jar包 用命令java -jar  xxx.jar

写程序分析堆内存溢出

package com.mvntest.mvn;

import java.util.ArrayList;
import java.util.List;

public class HeapOOM {
	public static void main(String[] args) throws InterruptedException{
		int size = 1024 * 1024 * 8;
		List<byte[]> list = new ArrayList<byte[]>();
		
		for(int i = 0; i < 1024; i++){
			System.out.println("往JVM内写入"+(i+1)+"M数据");
			Thread.sleep(1000);
			list.add(new byte[size]);
		}
	}
}

用jmap  -histo  进程号 | more 

查看系统内存情况,由图分析,bytes 在一直上升。

写程序分析堆内存溢出和栈内存溢出_java

写程序分析堆内存溢出和栈内存溢出_java_02

打开jvisualVM 工具,查看监视、线程、Visual GC。

写程序分析堆内存溢出和栈内存溢出_jar_03

写程序分析堆内存溢出和栈内存溢出_内存溢出_04

在ecplise 中安装MAT 在Help - Marketplace 中搜索Memory Analyzer  按照提示安装后,重新启动ecplise 

写程序分析堆内存溢出和栈内存溢出_jar_05

在ecplise中 打开File-open File 路径选择dump下来的文件路径,

写程序分析堆内存溢出和栈内存溢出_java_06

进入dump页面后显示

写程序分析堆内存溢出和栈内存溢出_内存溢出_07

写程序分析堆内存溢出和栈内存溢出_jar_08

写程序分析堆内存溢出和栈内存溢出_java_09


点击 红框内,在list objects 中选择outgoing references  和incoming references 定位到代码


写程序分析堆内存溢出和栈内存溢出_java_10

写程序分析栈内存溢出


在Java项目中,有很多时候需要做线程dump,比如,系统挂起、死锁、不能创建更多本地线程的OOME、CPU消耗过多等等;甚至有些堆内存溢出也可能跟线程有关,因为可能是创建了过多的线程导致堆内存不够用。


public class ThreadTest {
	public static void main(String[] args) throws InterruptedException{
		for(int i = 0 ;i < 1000; i++){
			Thread.sleep(1000);
			System.out.println(i);
		}
	}
}



写程序分析堆内存溢出和栈内存溢出_java_11



一直处于线程等待,在此页面中,点击dump按钮,打dump,把dump 拷到版本,,从最底下看mian 线程



写程序分析堆内存溢出和栈内存溢出_内存溢出_12


标签:dump,jar,程序,线程,内存,public,溢出
From: https://blog.51cto.com/u_16084838/6217437

相关文章

  • 使用ServiceSelf解决.NET应用程序做服务的难题
    1ServiceSelf为.NET泛型主机的应用程序提供自安装为服务进程的能力,支持windows和linux平台。功能自我服务安装自我服务卸载自我服务日志监听2自我服务安装虽然.NetCore提供了Microsoft.Extensions.Hosting.Systemd和Microsoft.Extensions.Hosting.WindowsServices两......
  • 程序猿偷懒神器之搜狗输入法-保姆级教程
    因为我个人用搜狗输入法比较多,所以发现了一些搜狗输入法的快捷方式也是比较偷懒的。知道的略过,不知道的可以简单看一下。首先比较程序员查询数据库的句子比如 selecttop1*from  再比如 select*from  再比如 delete from 等等这些句子每天不知道需要打多少......
  • C与C++的区别(程序上)
    一.头文件上  1.为什么c++语言的头文件上可以使用"stdio.h"?  答:因为c++的标准库已经帮我们包含了c语言的标准库,因此c++也可以实现c语言能实现大多功能。例如"iostream"是c++的输入输出流头文件,"stdio.h"是c语言的输入输出流头文件,当在c++语言中调用"stdio.h"后便可以在c++......
  • 如何在交互式环境中执行Python程序
    相信接触过Python的小伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行、命令行窗口运行、开发工具上运行等,其中在不同的操作平台上还互不相同。今天,小编讲些Python基础的内容,以Windows下交互式环境为依托,演示Python程序的运行。一般来说,顺利安装Python......
  • 记一次 .NET 某外贸ERP 内存暴涨分析
    一:背景1.讲故事上周有位朋友找到我,说他的API被多次调用后出现了内存暴涨,让我帮忙看下是怎么回事?看样子是有些担心,但也不是特别担心,那既然找到我,就给他分析一下吧。二:WinDbg分析1.到底是哪里的泄露这也是我一直在训练营灌输的理念,一定要知道是哪一边的暴涨,否则很可能就南......
  • 微信小程序开发页面下拉刷新和scrollview
    问题背景本文主要介绍微信小程序开发过程实现页面下拉刷新以及scrollview组件实现下拉刷新,以及二者的关系。问题分析微信小程序开发过程,如果要实现页面刷新以及scrollerview下拉刷新,步骤如下:(1)页面独立配置在对应页面的json文件中配置属性:"enablePullDownRefresh":true(2)项目......
  • JVM内存模型
    JVM内存模型JVM的内存模型也就是JVM中的内存布局,不要与java的内存模型(与多线程相关)混淆。下图是jdk8jvm内存模型图:程序计数器程序计数器是当前线程所执行的字节码的行号指示器。JVM支持多个线程同时运行,每个线程都会根据CPU时间片来回切换,那么如果当前线程获得时间片了,怎么知道它......
  • 京东小程序接入ARVR的技术方案和性能调优
    作者:京东零售戴旭京东小程序是一个开放技术平台,正在被越来越多的头部品牌选择,用于站内私域流量的营销和运营。诸如各种日化、奢侈品等品牌对ARVR有较多的诉求,希望京东小程序引擎提供一些底层能力,叠加品牌自主的个性化开发和定制,以支持更加丰富的场景和玩法,比如AR试妆、试戴等。......
  • 长连接Netty服务内存泄漏,看我如何一步步捉“虫”解决
    作者:京东科技王长春背景事情要回顾到双11.11备战前夕,在那个风雨交加的夜晚,一个急促的咚咚报警,惊破了电闪雷鸣的黑夜,将沉浸在梦香,熟睡的我惊醒。一看手机咚咚报警,不好!有大事发生了!电话马上打给老板:老板说:长连接吗?我说:是的!老板说:该来的还是要来的,最终还是来了,快,赶紧先把服......
  • C# 应用程序管理员运行
    右键项目-添加新项 改变UAC规则的level属性为 requireAdministrator,保存重新生成即可 ......