- 浏览: 72601 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
覃永波:
引用[*][img][/img][url][/url]
java 读取txt,java读取大文件 -
bits00:
...
tcpdump网摘
.什么是JVMPI?Java Virtual Machine Profiler Interface。参考 JVMPI可以做什么?它可以监控VM发生的各种事件。例如当JVM创建,关闭,Java类被加载,创建对象,或GC回收,等37种事件。既然是接口自然就是有一个头文件,[JAVA_HOME]\include\jvmpi.h。您可以开发自己的Profiler监控Java VM的发生的各种事件。
下面是我编写的使用JVMPI的例子,输出结果说明了为了运行一个Java类,JVM需要做的各种操作。
#include <jvmpi.h> //1.>cl -LDd -Zi -I. -IC:\j2sdk1.4.2_10\include -IC // :\j2sdk1.4.2_10\include\win32 -Tp.\jvmtrace.c -o jvmtrace.dll //2.>copy jvmtrace.dll C:\j2sdk1.4.2_10\bin\ //3.>java -Xrunjvmtrace org.colimas.jni.test.JniTest //jvmpi interface 全局指针 static JVMPI_Interface *jvmpi_interface; //时间通知处理函数 void notifyEvent(JVMPI_Event *event) { switch(event->event_type) { /*非常可怕的输出,好奇就试试。 case JVMPI_EVENT_CLASS_LOAD: fprintf(stderr, "trace> Class Load : %s\n", event->u.class_load.class_name); break;*/ case JVMPI_EVENT_ARENA_DELETE : fprintf(stderr, "trace> The heap arena :%d is deleted.\n", event->u.delete_arena.arena_id); break; case JVMPI_EVENT_ARENA_NEW : fprintf(stderr, "trace> The heap arena %s:%d is created.\n", event->u.new_arena.arena_name, event->u.new_arena.arena_id); break; case JVMPI_EVENT_GC_FINISH : fprintf(stderr, "trace> GC is finished. Used object:%d, space:%d, total object space:%d.\n", event->u.gc_info.used_objects, event->u.gc_info.used_object_space, event->u.gc_info.total_object_space); break; case JVMPI_EVENT_GC_START : fprintf(stderr, "trace>GC is started.\n"); break; case JVMPI_EVENT_HEAP_DUMP : fprintf(stderr, "trace> The heap dump begin %s,end %s.\n", event->u.heap_dump.begin, event->u.heap_dump.end); break; case JVMPI_EVENT_JVM_INIT_DONE : fprintf(stderr, "trace> JVM initialization is done.\n"); break; case JVMPI_EVENT_JVM_SHUT_DOWN : fprintf(stderr, "trace> JVM is shutting down.\n"); break; case JVMPI_EVENT_THREAD_END : fprintf(stderr, "trace> A thread ends.\n"); break; case JVMPI_EVENT_THREAD_START : fprintf(stderr, "trace> The thread %s begins whose group is %s, parent is %s.\n", event->u.thread_start.thread_name , event->u.thread_start.group_name, event->u.thread_start.parent_name); break; } } // profiler agent entry point extern "C" { JNIEXPORT jint JNICALL JVM_OnLoad(JavaVM *jvm, char *options, void *reserved) { fprintf(stderr, "trace> initializing ..... \n");
// get jvmpi interface pointer if ((jvm->GetEnv((void **)&jvmpi_interface, JVMPI_VERSION_1)) < 0) { fprintf(stderr, "trace> error in obtaining jvmpi interface pointer\n"); return JNI_ERR; } // initialize jvmpi interface jvmpi_interface->NotifyEvent = notifyEvent; // enabling class load event notification //jvmpi_interface->EnableEvent(JVMPI_EVENT_CLASS_LOAD, NULL); jvmpi_interface->EnableEvent(JVMPI_EVENT_ARENA_DELETE, NULL); jvmpi_interface->EnableEvent(JVMPI_EVENT_ARENA_NEW, NULL); jvmpi_interface->EnableEvent(JVMPI_EVENT_GC_FINISH, NULL); jvmpi_interface->EnableEvent(JVMPI_EVENT_GC_START, NULL); jvmpi_interface->EnableEvent(JVMPI_EVENT_HEAP_DUMP, NULL); jvmpi_interface->EnableEvent(JVMPI_EVENT_JVM_INIT_DONE, NULL); jvmpi_interface->EnableEvent(JVMPI_EVENT_JVM_SHUT_DOWN, NULL); jvmpi_interface->EnableEvent(JVMPI_EVENT_THREAD_END, NULL); jvmpi_interface->EnableEvent(JVMPI_EVENT_THREAD_START, NULL); fprintf(stderr, "trace> .... ok, dumping...\n"); if (jvmpi_interface->RequestEvent(JVMPI_EVENT_HEAP_DUMP,NULL)<0) { fprintf(stderr, "trace> error in obtaining jvmpi interface pointer\n"); return JNI_ERR; } fprintf(stderr, "trace> .... end\n\n"); return JNI_OK; } } 编译 >cl -LDd -Zi -I. -IC:\j2sdk1.4.2_10\include -IC :\j2sdk1.4.2_10\include\win32 -Tp.\jvmtrace.c -o jvmtrace.dll 拷贝jvmtrace.dll到JAVA_HOME\bin >copy jvmtrace.dll C:\j2sdk1.4.2_10\bin\ 运行 >java -Xrunjvmtrace org.colimas.jni.test.JniTest 结果 trace> initializing ..... trace> .... ok, dumping... trace> .... end trace> The thread Finalizer begins whose group is system, parent is (null). trace> The thread Reference Handler begins whose group is system, parent is (nul l). trace> The thread main begins whose group is main, parent is system. trace> JVM initialization is done. trace> The thread Signal Dispatcher begins whose group is system, parent is (nul l). hello JVM trace> A thread ends. trace> The thread DestroyJavaVM begins whose group is main, parent is system. trace> A thread ends. trace> JVM is shutting down. 2.HPROF又什么是?HPROF是J2SE自带的一个简单的profiler agent。 他是一个动态链接库文件,监控CPU的使用率,Heap分配情况等。将这些信息输出到文件或到socket。 java –Xrunhprof ToBeProfiledClass [:help]|[:=, ...] 例如: >java -Xrunhprof:heap=all org.colimas.jni.test.JniTest 在当前目录会生成java.hprof.txt文件。文件内记载了JVM运行时Heap的运行情况。 |
发表评论
-
飞鸽收藏(转)
2012-04-27 18:18 1305我们常在局域网内用飞鸽进行沟通、文件传输。有天突发奇想,要是我 ... -
主题:边读边写【7】 ----java 多线程实战【Thread /Executors】(转)
2012-04-23 11:39 1315http://www.iteye.com/topic/1122 ... -
牢骚一下,JavaFx 2.0太坑人了
2012-04-18 20:45 17用了半周看了下JavaFx2.0 ,看官方例子感觉还不 ... -
Java中一些关于日期、日期格式、日期的解析和日期的计算 (转)
2012-04-12 11:00 0http://www.blogjava.net/Jkallen ... -
操作property文件(转)
2012-04-12 10:51 891对于一些常量我们经 ... -
Java 系统运行时性能和可用性监控
2012-04-12 10:40 1116简介: 当今的许 ... -
Jconsole_一个监控JVM资源的JDK自带小工具 (转)
2012-04-12 10:32 1181最近一直忙着测一个tomcat的接口,测试中LR总出现2779 ... -
JVM jvmpi (转)
2012-04-12 10:18 1522转自 http://chain.blog.163.com/bl ... -
java 格式化小数
2012-03-09 16:53 1473DecimalFormat 是 NumberForm ... -
org.apache.commons.net.ftp.FTPClient 例子(转)
2012-03-02 09:26 1400转自 http://zhangnet1.iteye.com/b ... -
java查询一次性查询几十万,几百万数据解决办法(转)
2012-02-29 09:15 926java查询一次性查询几十万,几百万数据解决办法 很早 ... -
java 读取txt,java读取大文件
2012-02-26 19:39 2062java 读取txt,java读取大文件 设置缓存大小 ... -
StringUtils用法+StringUtils详细介绍
2012-02-26 19:38 821StringUtils用法+StringUtils详细介绍博文 ... -
java 字节流网址收藏(暂)
2012-02-07 10:43 712Java I/O关于缓冲区部分提高性能的源码分 ... -
String类substring方法导致的Java内存泄漏问题 (转)
2012-01-06 10:10 1377此问题在项目中被发现,经查看JDK源码(JDK1.6), ... -
Swing 线程之SwingUtilities.invokeLater()(转)
2012-01-06 10:00 1133声明:本文章转自 http://blog.csdn.ne ... -
Swing 线程之SwingUtilities.invokeLater() (转)
2012-01-06 09:59 2声明:本文章转自 http://blog.csdn.net/b ... -
Java Swing GUI多线程之SwingUtilities.invokeLater和invokeAndWait
2012-01-05 16:55 5349在Java中Swing是线程不安全的,是单线程的设计, ... -
用java.util.Timer定时执行任务
2012-01-05 16:11 800如 ... -
ubuntu java配置
2011-12-30 20:54 1045Ubuntu10.10安装sun-Java6-jdk ...
相关推荐
JVM的相关概念___已看.doc
04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、...
java_jvm_参数_-Xms_-Xmx_-Xmn_-Xss_调优总结.pdf java_jvm_参数_-Xms_-Xmx_-Xmn_-Xss_调优总结.pdf
Java_Jvm_Jsp_Spring3_Struts2_Hibernate_Oracle _
VC调用java的简单例子。需要注意jvm.dll路径,路径不对就不能成功!
JVM、GC详解及调优,资料很详细,清楚,仔细阅读
一个jvm的学习资料,对新手很有帮助,建议收藏
JVM_多线程高并发_集合框架_数据库 BAT面试金典常见80问.pdf
网上下载本程序用于获取运行中的JVM系统的参数
Java性能监控与调优Demo,主要学习各种JDK监控工具以及jvm调优-monitor_tuning_Demo
Java助力需要jvm学习及优化与性能瓶颈分析参考
java 11相关的jvm文档 帮助了解java11的新知识
运用代理模式,通过自定义classloader对代码加密,啊;敌法;打飞机
java虚拟机,机子上找的
Java内存泄露_JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat
java 核心知识。 JVM 核心优化的问题
inside jvm 所有源代码,包括原理的java applet演示图,以及所有用的到的源代码
JVM内存管理的介绍,编写GC友好的代码。 本材料主要关心 Sun Hotspot JVM 6的内存管理 Sun Hotspot JVM 6的GC模型 主要针对JVM6的GC模型,但也会简单介绍Java 7的G1 编写GC友好代码的一些技巧
关于tomcat的JVM设置参数,可以有效地管理内存,释放内存。
JVM运行机制深入分析,适用于研究java开发的人员,想深入理解jvm