java内存问题排查及分析
最近了解了一下jdk对于jvm分析工具的使用,下面通过一个简单的列子介绍一下,以下内容部分来自其他帖子。
下面这段代码明显有问题(从网上抄的)
import java.util.HashMap;
import java.util.Map; public class MemoryLeak { public static void main(String[] args) {
Map<Key, String> map = new HashMap<Key, String>(1000); int counter = 0;
while (true) {
// creates duplicate objects due to bad Key class
map.put(new Key("dummyKey"), "value");
counter++;
if (counter % 1000 == 0) {
System.out.println("map size: " + map.size());
System.out.println("Free memory after count " + counter
+ " is " + getFreeMemory() + "MB"); sleep(1000);
} }
} // inner class key without hashcode() or equals() -- bad implementation
static class Key {
private String key; public Key(String key) {
this.key = key;
} } //delay for a given period in milli seconds
public static void sleep(long sleepFor) {
try {
Thread.sleep(sleepFor);
} catch (InterruptedException e) {
e.printStackTrace();
}
} //get available memory in MB
public static long getFreeMemory() {
return Runtime.getRuntime().freeMemory() / (1024 * 1024);
} }
执行这个代码以后通过JDK自带工具jconsole查看jvm的使用情况

连接后查看果然和猜想的一样堆内存的使用蹭蹭蹭的往上窜

然后通过jps命令找到对应进程的id

通过进程的ID把内存dump下来

然后通过jvisualvm工具分析该文件

发现HashMap的实例数很多。
可以通过 jhat -port 5000 heap.hrof 命令 启动服务我们就可以在浏览器中,通过http://localhost:5000/进行访问,如下所示


通过以上的手段分析 可以或多或少的了解jvm的内存分配,以及定位到代码问题的所在!!!
java内存问题排查及分析的更多相关文章
- Java内存模型JMM简单分析
参考博文:http://blog.csdn.net/suifeng3051/article/details/52611310 http://www.cnblogs.com/nexiyi/p/java_ ...
- 一次 Java 内存泄漏排查过程,涨姿势
人人都会犯错,但一些错误是如此的荒谬,我想不通怎么会有人犯这种错误.更没想到的是,这种事竟发生在了我们身上.当然,这种东西只有事后才能发现真相.接下来,我将讲述一系列最近在我们一个应用上犯过的这种错误 ...
- 一个Java内存可见性问题的分析
如果熟悉Java并发编程的话,应该知道在多线程共享变量的情况下,存在“内存可见性问题”: 在一个线程中对某个变量进行赋值,然后在另外一个线程中读取该变量的值,读取到的可能仍然是以前的值: 这里并非说的 ...
- 小心踩雷,一次Java内存泄漏排查实战
1.使用 jstack pid > jstack.log 保存了线程栈的现场,使用 jmap -dump:format=b,file=heap.log pid 保存了堆现场: https://m ...
- java 内存 线程 类 vm分析工具
JMeter.Jconsole.JVMStat
- Java内存模型原理总结(转自51CTO)
转载地址:http://developer.51cto.com/art/201811/587220.htm [51CTO.com原创稿件]这篇文章主要介绍模型产生的问题背景,解决的问题,处理思路,相关 ...
- Java内存模型原理,你真的理解吗?
[51CTO.com原创稿件]这篇文章主要介绍模型产生的问题背景,解决的问题,处理思路,相关实现规则,环环相扣,希望读者看完这篇文章后能对 Java 内存模型体系产生一个相对清晰的理解,知其然知其所以 ...
- 一个java内存泄漏的排查案例
这是个比较典型的java内存使用问题,定位过程也比较直接,但对新人还是有点参考价值的,所以就纪录了一下. 下面介绍一下在不了解系统代码的情况下,如何一步步分析和定位到具体代码的排查过程 (以便新人参考 ...
- java程序——CPU过高100%及内存泄露排查
CPU过高 这类问题可以使用 top 命令观察一些,CPU 是不是都被 Java 程序占用了.比如下面这个截图: 服务器的 CPU 大多都被 Java 占用了.这正是我们之前生产上 CPU 过高的一个 ...
随机推荐
- ArcMap图层属性表中添加图片
一看标题是不是有点懵?懵就对了!刚接触到的时候我也有点懵,属性表不是都是文本啊数字啊之类的格式,怎么还可以存图片,下面就带大家来看看吧! 一.关于图层入库问题 图层进入数据库和图层以shp格式存储时, ...
- (转)薛飞 基于VLC的Unity视频播放器(二)
转自:http://www.manew.com/thread-144229-1-1.html 留个记录.
- Linux第四节课学习笔记
touch命令可修改文件atime和mtime,不能修改ctime.可用于修改文件后将修改时间改回之前修改时间. mkdir命令用于创建空白的目录,格式为“mkdir [选项] 目录”.加上参数-p可 ...
- ifconfig中lo、eth0、br0、wlan0接口
在 实体机上 ifconfig 命令用于 显示或配置网络设备(网络接口卡) 或修改. 1. 显示内容分析: lo 回环接口lo Link encap:Local Loopback inet addr ...
- 在linxu机器ansible上运行启动django项目命令
source py3env/bin/activate 进入虚拟环境 cd /xiangmulujing 进入项目路径 然后就可以执行运行命令了 python manage.py runser ...
- 利用类的反射导入excel示例
直接上代码 1.页面展示 <div class="panel-heading font-bold text-center"> <i class="fa ...
- py-day4-1 python reduce函数
from functools import reduse 从模块中导入 reduce函数: 处理一个序列,然后把序列进行合并操作 #**** 问题:求1+2+3+100的和是多少? # 一,原始 ...
- CAST()函数可以进行数据类型的转换。
CAST()函数可以进行数据类型的转换. CAST()函数的参数有两部分,源值和目标数据类型,中间用AS关键字分隔. 以下例子均通过本人测试. 一.转换列或值 语法:cast( 列名/值 as 数据类 ...
- mysql主从原理及配置
一.mysql集群架构: 1.一主一从 2.双主 3.一主多从(扩展mysql的读性能) 4.多主一从(5.7开始支持) 5.联机复制 关系图: 二.配置主从用途及条件 2.1用途 1.保障可用性,故 ...
- RN 获取组件的宽度和高度
https://www.cnblogs.com/zhiyingzhou/p/7471212.html https://blog.csdn.net/calvin_zhou/article/details ...