虚拟机问题 我想了解下java底层点相关技术不知从何下手?比方说我想实时监控我运行中的项目,那些类占用的过多的内存,生成了哪些对象,我由此可以判断它是否是造成内存泄漏的根源,这样比走查代码的代价要很多。简单说就是有没有java相关的API可以供我直接查看底层虚拟机相关详细信息,类似自己实现虚拟机jmap这样的工具,请了解的朋友给点思路,谢谢,jmap我个人感觉对查找内存泄漏并非很方便,它没有详细的告诉我是那个类的那个对象占用了那么大的内存。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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去控制对象这些的生成,了解虚拟机如何操作内存,统计内存使用。上面说的有点出入。 其实就是调用jmap去查看还可以查查这个类HotSpotVirtualMachine my god3L的代码好像是以前我给别人回帖时写的例子,该例子也是调用jmap查看的LZ可以参考java.lang.manager包和javax.management包下的类或者去下个jconsole源码研究吧 我觉得还是调用java自己的工具吧,最多给封装一层 可以看看java虚拟机规范,网上有第二版的中文译本(感谢翻译者们) 请问如何在Table中用对勾显示"是否" 请教关于Java的文件操作 提问:关于java的中文显示问题 Graphics2D生成大图片遇到的问题! Can you help me? 求大神帮忙!!! 关于继承和多态的一个问题 简单的入门问题,关于编译后运行 inputStream,outputStream与writer和reader的本质区别。 一个log4j的问题:我能不能根据level的不同定义不同的输出对象,比如不同的log文件 java如何动态查询oracle 匹配单一字符重复出现的正则表达式是什么??
这本书讲的很详细
给一个小例子,之前论坛里粘过的。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以上版本。
3L的代码好像是以前我给别人回帖时写的例子,该例子也是调用jmap查看的
LZ可以参考java.lang.manager包和javax.management包下的类
或者去下个jconsole源码研究吧