013 - 关于GC root: Native Stack | MAT分析

Question:

I have some third library code that I run and after some time I run into OutOfMemoryError. So I fired up the Eclipse MAT and analyzed the memory. Now it seems the memory can‘t be disposed because there is an object that is a shown as GC root: Native Stack

Answer:

Objects being shown as GC root: Native Stack turned out to be a problem of the Eclipse Debugger. When the application was started without the debugger (i.e. with ‘run‘ instead of ‘debug‘) the problem disappeared. This was also the reason that I couldn‘t find the code where the objects where used in JNI inside my project (cause they weren‘t).

The same problem appears when using IntelliJ Debugger

简单说:

通过Eclipse或者IntelliJ  采用debug模式启动程序时,发生内存溢出错误后,由于存在 GC root: Native Stack,导致发生错误的方法中创建的对象无法释放 (正常情况下,发生错误后,方法调用结束,对象会被正常释放的)。

解决方法:采用run运行(非debug模式),就不会存在该问题了013 - 关于GC root: Native Stack  |  MAT分析

原文地址:https://www.cnblogs.com/756623607-zhang/p/8993885.html

时间: 2024-10-29 05:49:17

013 - 关于GC root: Native Stack | MAT分析的相关文章

在Eclipse中使用MAT分析Android程序内存使用状况(转)

对于Android这种手持设备来说,通常不会带有太大的内存,而且一般用户都是长时间不重启手机,所以编写程序的时候必须要非常小心的使用内存,尽量避免有内存泄露的问题出现.通常分析程序中潜在内存泄露的问题是一件很有难度的工作,一般都是由团队中的资深工程师负责,而且随着程序代码量的提高,难度还会逐步加大. 今天要介绍一个在Eclipse中使用的内存分析工具——MAT(Eclipse Memory Analyzer,主页在http://www.eclipse.org/mat/).它是一个功能非常丰富的J

使用MAT分析Java内存

Overview MAT(Memory Analyzer Tool) 是一个JAVA Heaper分析器,可以用来分析内存泄露和减少内存消耗.分析Process showmap中的/dev/ashmem/dalvik-heap(deleted)一项所占用的Memory.可以参考我写的使用showmap分析系统内存占用情况一文. 下面就将一下如何使用Eclipse MAT分析Android应用程序内存的消耗.所需要的是已经安装ADT和SDK的Eclipse.然后可以在http://www.ecli

利用MAT分析JVM内存问题,从入门到精通(二)

上一篇文章MAT入门到精通(一)介绍了MAT的使用场景和基本概念,这篇文章开始介绍MAT的基本功能,后面还有两篇,一篇是MAT的高级功能,另一篇是MAT实战案例分析. 三.欢迎页 使用MAT打开一个heap dump文件,解析完成后,默认会进入欢迎页,欢迎页里包含了一些常见的分析:最大内存占用分析.常见的分析动作.常用的分析报告.MAT使用教程等等. 我们看下下面这张图,可以看出MAT的主要结构和功能: inspector:透视图,用于展示一个对象的详细信息,例如内存地址.加载器名称.包名.对象

MAT 分析dump文件

public class OOM { private static List<Byte[]> list = new ArrayList<Byte[]>(); public static void main(String[] args) { Zip zip = new Zip(); zip.test(list); } } public class Zip { private List<Byte[]> a = null; public List<Byte[]>

针对main函数的运行时stack的分析

针对main函数的运行时stack的分析 这里需要特殊说明的是运行环境是64-bits的Ubuntu.编译器是gcc 测试用代码: int main(int argc,char* argv[]) { int array[10]; array[0] = 10; array[9] = 9; return 0; } 利用GDB调试这段代码.我们来观察分析main函数的栈 分析&argc 和&argv可以知道当前main函数栈的使用情况 64bits 的机器.指针长度是64bits,即8byte.

jstat的使用/jam的使用/使用MAT分析内存溢出/

2.通过jmap监控内存使用情况 2.1 监控堆内存   jamp -heap 12840 2.2 监控内存中对象的数量及其大小 查看所有对象的数量以及大小包括类型:jmap -histo 14116 | more 查看所有对象的数量以及大小包括类型:jmap -histo:live 14116 | more 2.3 通过jmap导出堆内存使用情况的文件 2.4  通过jhat查看dump文件并且进行分析,启动一个HTTP端口进行访问,通过该端口可以查看到整个应用程序所使用的的所有对象的情况,提

使用Memory Analyzer tool(MAT)分析内存泄漏

前言 在平时工作过程中,有时会遇到OutOfMemoryError,我们知道遇到Error一般表明程序存在着严重问题,可能是灾难性的.所以找出是什么原因造成OutOfMemoryError非常重要.现在向大家引荐Eclipse Memory Analyzer tool(MAT),来化解我们遇到的难题.如未说明,本文均使用Java 5.0 on Windows XP SP3环境. 为什么用 MAT 之前的观点,我认为使用实时profiling/monitoring之类的工具,用一种非常实时的方式来

Android 性能优化之使用MAT分析内存泄露问题

我们平常在开发Android应用程序的时候,稍有不慎就有可能产生OOM,虽然JAVA有垃圾回收机,但也不能杜绝内存泄露,内存溢出等问题,随着科技的进步,移动设备的内存也越来越大了,但由于Android设备的参差不齐,可能运行在这台设备好好的,运行在那台设备就报OOM,这些适配问题也是比较蛋疼的,比如我们平常运行着一个应用程序,运行的好好的,突然到某个Activity就给你爆出一个OOM的错误,你可能会以为是这个Activity导致的内存泄露,你会想到也有可能是内存有泄露吗?内存泄露就像一个定时炸

如何用MAT分析Android应用内存泄露

使用工具:Android Studio 2.0 Preview, Android Device Monitor, MAT(Memory Analyzer). 点击Android Studio工具栏上的“Android Device Monitor”,如下图 打开后选中应用进程,然后点击“Update heap”,接着反复点击应用的每个activity,最后“Dump HPROF file”,如下图1-2-3所示 保存hprof文件. 下面需要对hprof文件进行转换. 打开CMD终端,进入到\s