- 浏览: 75874 次
- 性别:
- 来自: 厦门
文章分类
最新评论
-
覃永波:
引用[*][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 1372我们常在局域网内用飞鸽进行沟通、文件传输。有天突发奇想,要是我 ... -
主题:边读边写【7】 ----java 多线程实战【Thread /Executors】(转)
2012-04-23 11:39 1405http://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 988对于一些常量我们经 ... -
Java 系统运行时性能和可用性监控
2012-04-12 10:40 1199简介: 当今的许 ... -
Jconsole_一个监控JVM资源的JDK自带小工具 (转)
2012-04-12 10:32 1225最近一直忙着测一个tomcat的接口,测试中LR总出现2779 ... -
JVM jvmpi (转)
2012-04-12 10:18 1573转自 http://chain.blog.163.com/bl ... -
java 格式化小数
2012-03-09 16:53 1524DecimalFormat 是 NumberForm ... -
org.apache.commons.net.ftp.FTPClient 例子(转)
2012-03-02 09:26 1467转自 http://zhangnet1.iteye.com/b ... -
java查询一次性查询几十万,几百万数据解决办法(转)
2012-02-29 09:15 1011java查询一次性查询几十万,几百万数据解决办法 很早 ... -
java 读取txt,java读取大文件
2012-02-26 19:39 2118java 读取txt,java读取大文件 设置缓存大小 ... -
StringUtils用法+StringUtils详细介绍
2012-02-26 19:38 949StringUtils用法+StringUtils详细介绍博文 ... -
java 字节流网址收藏(暂)
2012-02-07 10:43 752Java I/O关于缓冲区部分提高性能的源码分 ... -
String类substring方法导致的Java内存泄漏问题 (转)
2012-01-06 10:10 1452此问题在项目中被发现,经查看JDK源码(JDK1.6), ... -
Swing 线程之SwingUtilities.invokeLater()(转)
2012-01-06 10:00 1235声明:本文章转自 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 5446在Java中Swing是线程不安全的,是单线程的设计, ... -
用java.util.Timer定时执行任务
2012-01-05 16:11 850如 ... -
ubuntu java配置
2011-12-30 20:54 1085Ubuntu10.10安装sun-Java6-jdk ...
相关推荐
JVM的相关概念___已看.doc
04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、导致JVM内存泄露的ThreadLocal详解_ev04、...
《JVM、GC详解及调优》是一份深入解析Java虚拟机(JVM)和垃圾收集(Garbage Collection,简称GC)的详细资料。本文将根据提供的信息,深入阐述JVM的工作原理,GC的机制以及如何进行JVM的性能调优。 首先,JVM是...
Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。作为新手,了解JVM的工作原理和优化技巧是成为熟练Java开发者的重要步骤。以下是一些关于JVM的关键知识点: 1. **内存区域...
Java_Jvm_Jsp_Spring3_Struts2_Hibernate_Oracle _
VC调用java的简单例子。需要注意jvm.dll路径,路径不对就不能成功!
总的来说,"JVM.zip"提供的资源对于任何Java开发者来说都是有价值的,它帮助我们更好地理解和管理Java应用程序在JVM上的运行状态,从而实现更高效、更稳定的系统性能。通过深入学习和利用这些工具,开发者能够提升...
模仿_jvm_跨平台部署。_使用_shell_脚本一键安装保证_maclinux_开发环境和线上环_cdk
综上所述,"jvm.zip_jvm_knownobc_tomcat"这个压缩包中的内容将帮助我们深入理解如何调整Tomcat的JVM设置,以实现更高效、更稳定的运行环境。通过对这些知识点的掌握,可以提升Tomcat在处理复杂应用时的性能,降低...
JAVA虚拟机(JVM)是Java程序运行的核心组件,它是一种抽象计算机,负责解释和执行Java字节码,使得Java程序具有跨平台的能力。在深入理解JVM之前,我们需要了解几个基本概念: 1. **字节码**:Java源代码经过编译...
JVM(Java虚拟机)是Java平台的核心组件,负责运行Java程序。在Java 11中,对JVM进行了一些关键的优化和更新,这些变化对于理解和提升Java应用程序的效率至关重要。 首先,让我们深入了解Java 11中的JVM改进。JVM...
在Java世界中,JVM(Java虚拟机)是运行所有Java程序的核心,它负责加载、验证、执行字节码,并管理内存。而JVM代理(JVM Agent)和类加载器(ClassLoader)则是两个关键的概念,它们对于深入理解Java应用程序的运行...
Java虚拟机(JVM)是Java程序运行的基础,它负责解释和执行字节码,提供了一个平台无关的运行环境。JVM性能优化是提升Java应用效率的关键环节,涉及到内存管理、垃圾回收、线程调度等多个方面。以下是对"Java JVM及...
《JVM_多线程高并发_集合框架_数据库 BAT面试金典常见80问.pdf》这份资料聚焦于Java开发人员在面试中可能遇到的重要问题,涵盖了JVM、多线程高并发、集合框架和数据库等多个核心领域。以下是对这些知识点的详细说明...
Java虚拟机(JVM)是Java程序运行的基础,它负责解释和执行字节码,为开发者提供了跨平台的运行环境。在面试中,对于Java开发者来说,深入理解JVM及其性能优化是至关重要的。以下是对JVM核心知识及性能优化的一些...
Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。在深入理解JVM的工作流程之前,我们首先需要知道Java程序是如何被编译和运行的。Java源代码(.java文件)通过Java编译器...
《深入理解JVM》(Inside the JVM) 是一本关于Java虚拟机的重要参考资料,它涵盖了JVM的内部工作原理,包括类加载机制、内存管理、字节码执行等核心概念。"gettingloaded.html" 可能是其中的一个章节,专门探讨了类的...
这个错误表明程序在运行过程中耗尽了可用内存,导致JVM无法正常工作。在这种情况下,程序员会生成一个heap dump文件,如`java_error_in_idea64.hprof`,以便后续分析和解决问题。 首先,`java_error_in_idea64....
- **影响**:年轻代是JVM堆空间的一部分,主要用于存放新创建的对象。合理设置年轻代的大小有助于提高GC的效率,减少Full GC的次数。Sun官方推荐配置为整个堆的3/8。 - **示例**:`-Xmn2g` 表示设置年轻代大小为2GB...
通过这些工具和参数的使用,我们可以有效地监控Java应用的运行状态,发现性能瓶颈,并进行针对性的优化。在学习这个Demo时,你可能会接触到如何使用这些工具进行实战操作,理解它们的工作原理,以及如何根据实际情况...