java运行内存占用过大。。怎么定位问题。

黄开源中国 发布于 2014/01/08 18:39
阅读 2K+
收藏 1

从linux看到,占用大概6G多的内存。。。看过好几款工具,都没找到我需要的功能:

查找占用时间较长并且占用内存较大的对象。并且找出这个对象是在哪里引用到。。

简单的说就是能帮我定位到究竟是哪里出的问题。。。因为也没在运行时加载很大量的数据存储,即使有,那也是15分钟一次的。不会时时刻刻都占用6G吧?~

跟帖的童鞋希望能提供一些工具以及具体的使用方法or连接博客之类。。或者有相关问题的解决经验也好。。先谢过了~~~

加载中
0
蟋蟀哥哥
蟋蟀哥哥
linux下的内存管理不同啊。。不要用win的理念去理解linux
0
huan
huan

很多工具都可以分析堆栈数据的,着重分析一下老年代就行了。

另外,一旦java堆扩容,就不会退回去了。可以自己限制一下jvm内存大小。

黄开源中国
黄开源中国
如果是这样的话。那么大概我能够理解。。跟Mongodb的有点类似。就等于很大一部分是虚占着。其实里面是没放东西??
0
专业打酱油
专业打酱油

java自带的jvisualVM,就有这个功能。

你可以做个内存的dump,然后用eclipse的mat插件,看一下。

如果还看不懂,就google一下,看看mat怎么用。

如果还不会,就得好好学学英文了。。。。

0
南湖船老大
南湖船老大
Java里用来分析的工具太多太多了,jconsole,jvisualvm,Java Mission..
黄开源中国
黄开源中国
我用过jconsole。。但是查出来。就是一串对象。。。然后排序显示这些对象的内存占用情况。。但是他是把所有对象归到一起了。譬如其中一列 hashmap 300000000 类似这样。完全看不出什么呀。还是说我用的命令不对
0
二进制宇宙
二进制宇宙

高富帅程序员与屌丝程序员


高富帅看到自己程序占了6G内存, 说才占这么点, 这么帮我节省啊


屌丝看到自己程序占了6G内存,顿时傻眼了,上OSCHINA

0
骨头bone
骨头bone

用java自带的jvisualvm即可:

在运行过程中dump出内存快照,加载分析:

1.找到系统内存中除String和char外占用空间最大的实例

2.打开1中的某个实例,在引用树上右键->查找最近垃圾回收根节点

3.检查该对象到垃圾回收根节点的引用链,查找自己写的对象

4.check代码,3中查到对象很可能就是内存泄露所在

黄开源中国
黄开源中国
原来还能这样用。受教了谢谢。
返回顶部
顶部