java查看内存泄露_Java内存泄露如何排查

java查看内存泄露_Java内存泄露如何排查Java 内存泄露是常常出现的问题 Java 攀登网进行了该问题的整理 具体的如下所示 1 2 内存泄露 MemoryLeak 是指程序在申请内存后 无法释放已申请的内存空间 一次内存泄露危害可以忽略 但内存泄露堆积后果很严重 无论多少内存 迟早会被占光 在 Java 中 内存泄漏就是存在一些被分配的对象 这些对象有下面两个特点 1 首先 这些对象是可达的 即在有向图中 存在通路可以与其相连 2 其次

Java内存泄露是常常出现的问题,Java攀登网进行了该问题的整理,具体的如下所示:

1.2 内存泄露Memory Leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内

存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

在 Java中,内存泄漏就是存在一些被分配的对象,

这些对象有下面两个特点:

1)首先,这些 对象是可达的,即在有向图中,存在通路可以与其相连;

2)其次,这些对象是无用的,即 程序以后不会再使用这些对象。如果对象满足这两个条件,

这些对象就可以判定为Java中的 内存泄漏,这些对象不会被GC所回收,然而它却占用内存。

关于内存泄露的处理页就是提 高程序的健壮型,因为内存泄露是纯代码层面的问题。

1.3 内存溢出和内存泄露的联系内存泄露会最终会导致内存溢出。相同点:都会导致应用程

序运行出现问题,性能下降或挂起。

不同点:1) 内存泄露是导致内存溢出的原因之一,内 存泄露积累起来将导致内存溢出。

2) 内存泄露可以通过完善代码来避免,内存溢出可以通 过调整配置来减少发生频率,

但无法彻底避免。

1、首先通过“虚拟机进程状况工具:jps”找出正在运行的虚拟机进程,最主要是找出这个 进程在本地

虚拟机的唯一ID(LVMID,Local Virtual Machine Identifier),因为在后面 的排查过程中都是需要这个

LVMID来确定要监控的是哪一个虚拟机进程。同时,对于本地 虚拟机进程来说,LVMID与操作系统的进程ID

(PID,Process Identifier)是一致的,使 用Windows的任务管理器或Unix的ps命令也可以查询到虚拟机进程的LVMID。

2、找到你需要监控的ID(假设为20954),再利用“虚拟机统计信息监视工具:jstat”监视虚拟机各种运行状态信息。

3、分析方法通常有两种:

1)把堆dump下来再用MAT等工具进行分析,但dump堆 要花较长的时间,并且文件巨大,再从服务器上拖回本地导入工具,

这个过程有些折 腾,不到万不得已最好别这么干。2)更轻量级的在线分析,使用“Java内存影像工 具:jmap”生成堆转储快照

(一般称为headdump或dump文件)。

dump用jmat指令 4、定位到源代码分析。定位代码,有很多种方法,比如前面提到的通过MAT查看 Histogram即可找出是哪块代码。

查看哪个类的占用情况多,然后分析引用关系。都 在MAT里面的Histogram里面看即可。Java的内存泄露多半是因为对象存在无效的引用,

对象得不到释放,如果发现Java应 用程序占用的内存出现了泄露的迹象,那么我们一般采用下面的步骤分析:

1. 用工具 生成java应用程序的heap dump(如jmap)

2. 使用Java heap分析工具(如 MAT),找出内存占用超出预期的嫌疑对象3. 根据情况,分析嫌疑对象和其他对象的 引用关系。

4. 分析程序的源代码,找出嫌疑对象数量过多的原因。

1、什么是Dump文件 Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。Dump文件是用来给驱动程序编

写人员调试驱动程序用的,这种文件必须用专用工具软件打 开。当我们的程序发布出去之后,在客户机上是无法跟踪代码的,所以Dump(扩展名是 .dmp)

文件对于我们来说特别重要。我们可以通过.dmp文件把出现问题的情况再现,然后 根据再现的状况(包括堆栈调用等情况),可以找到出现问题对应的行号。

Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java

应用程序的资源和性能 进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。https://www.jianshu.com/p/fb9e40命令jmap是一个

多功能的命令。它可以生成 java 程序的 dump 文件, 也可以 查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

https://blog.csdn.net/weixin_/article/details/

(责任编辑:admin)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214593.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:53
下一篇 2026年3月18日 下午3:54


相关推荐

  • sql索引语法

    sql索引语法一 索引 索引是一种快速访问数据的途径 可提高数据库性能 索引使数据库程序无须对整个表进行扫描 就可以在其中找到所需的数据 就像书的目录 可以快速查找所需的信息 无须阅读整本书 nbsp 一 索引的分类逻辑分类 单列索引 组合索引 唯一索引 非唯一索引 函数索引 物理分类 区分索引 非分区索引 B 树索引 正向索引 反向索引 位图索引 nbsp nbsp 二 索引的缺点 nbsp nbsp nbsp nbsp 1

    2026年3月26日
    2
  • mysql—如何获取有性能问题的sql

    mysql—如何获取有性能问题的sql

    2020年11月12日
    204
  • 培根密码加解密_二进制密码在线解密

    培根密码加解密_二进制密码在线解密0x00介绍培根密码实际上就是一种替换密码,根据所给表一一对应转换即可加密解密它的特殊之处在于:可以通过不明显的特征来隐藏密码信息,比如大小写、正斜体等,只要两个不同的属性,密码即可隐藏0x01代码实现脚本很简单,就是建立对应关系,对密文,或者明文进行相应的替换即可需要注意的是输入的都应该是全小写字母或全大写字母,在脚本里也有说明python脚本如下:#…

    2025年7月27日
    5
  • 实战教程 ​

    实战教程 ​

    2026年3月13日
    2
  • kettle工具使用及集成[通俗易懂]

    kettle工具使用及集成[通俗易懂]kettle简介Kettle是一款免费开源的基于Java的企业级ETL工具,功能强大简单易用,无可抗拒。

    2022年10月9日
    5
  • 老是记不住事情是怎么回事_laogeshi

    老是记不住事情是怎么回事_laogeshi#ifdef__int64 typedef__int64LL;#else typedeflonglongLL;#endif用%I64d

    2022年8月1日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号