当前位置:编程学习 > JAVA >>

虚拟机问题

我想了解下java底层点相关技术不知从何下手?

比方说我想实时监控我运行中的项目,那些类占用的过多的内存,生成了哪些对象,我由此可以判断它是否是造成内存泄漏的根源,这样比走查代码的代价要很多。

简单说就是有没有java相关的API可以供我直接查看底层虚拟机相关详细信息,类似自己实现虚拟机jmap这样的工具,请了解的朋友给点思路,谢谢,jmap我个人感觉对查找内存泄漏并非很方便,它没有详细的告诉我是那个类的那个对象占用了那么大的内存。 --------------------编程问答-------------------- 本人新手,jAVA也会内存泄漏...帮顶,学习 --------------------编程问答-------------------- Java虚拟机规范(Java SE 7)
这本书讲的很详细 --------------------编程问答-------------------- 实时监控程序占用内存,并不是去看虚拟机实现,了解虚拟机了,也不会知道当时你的项目里内存创建了多少对象,更不会看到每个对象占用多少内存啊。
给一个小例子,之前论坛里粘过的。

import java.lang.management.*;
import java.io.*;

class Test {
    public static void main(String[] args) {
        try {
            System.out.println(ManagementFactory.getRuntimeMXBean().getName());
            String pid = ManagementFactory.getRuntimeMXBean().getName().replaceAll("(\\d+)@.*", "$1");
            String cmd = "jmap -histo " + pid;
            System.out.println(cmd);
            final Process p = Runtime.getRuntime().exec(cmd);
            Thread t = new Thread() {
                public void run() {
                    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
                    String buf;
                    try {
                        while ((buf=br.readLine()) != null) {
                            System.out.println(buf);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
            t.start();
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
}


输出格式为 num #instances #bytes class name

请使有jdk1.6以上版本。 --------------------编程问答-------------------- 当然还是在JVM去控制对象这些的生成,了解虚拟机如何操作内存,统计内存使用。上面说的有点出入。 --------------------编程问答-------------------- 求解释
引用 3 楼  的回复:
实时监控程序占用内存,并不是去看虚拟机实现,了解虚拟机了,也不会知道当时你的项目里内存创建了多少对象,更不会看到每个对象占用多少内存啊。
给一个小例子,之前论坛里粘过的。

Java code
import java.lang.management.*;
import java.io.*;

class Test {
    public static void main(String[……
--------------------编程问答-------------------- 其实就是调用jmap去查看

还可以查查这个类HotSpotVirtualMachine  --------------------编程问答-------------------- my god
3L的代码好像是以前我给别人回帖时写的例子,该例子也是调用jmap查看的
LZ可以参考java.lang.manager包和javax.management包下的类
或者去下个jconsole源码研究吧
--------------------编程问答-------------------- yeah!就是宝哥的 --------------------编程问答-------------------- --------------------编程问答-------------------- 我觉得还是调用java自己的工具吧,最多给封装一层 --------------------编程问答-------------------- 可以看看java虚拟机规范,网上有第二版的中文译本(感谢翻译者们)
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,