java btrace_BTrace for Java应用程序简介
java btrace
什么是BTrace?
BTrace是一个开源项目,始于2007年,最初由A.Sundararajan和K.Balasubramanian两人拥有。 由于Java One 2008会议,它获得了名声。
BTrace帮助我们查明应用程序中的复杂代码问题。 使用BTrace可以解决的问题包括代码错误,不可预测的流程,并发问题和性能问题,这些问题是在特定且通常难以重现的情况下发生的。
BTrace以程序员定义的方式动态(无需重新启动应用程序)检测(更改)应用程序的字节码。 工具的目的是查看在代码的特定区域中发生的情况。 如果超出此范围使用,则可能会损害应用程序的流程,因此验证程序禁止该操作。
例如,让我们尝试解决以下问题–重要文件每天偶尔被删除一次。 我们想要找到执行此操作的代码。 因此,如果文件名合适,我们想更改java.io.File的'delete'方法并打印调用线程的堆栈跟踪。 使用BTrace,我们可以通过编写简短的Java代码来做到这一点。
以下架构显示BTrace工作原理。
在Target JVM中,有一个动态插入的BTrace代理(使用attach API )。 BTrace客户端(BTrace命令行或具有BTrace插件的Visual VM)将命令发送到代理并获取响应。 BTrace代理会检测正在加载到目标JVM中的类,并重新加载已经加载的类。
编写跟踪脚本
编写BTrace脚本非常简单明了,其概念类似于面向方面的编程概念。
import com.sun.btrace.annotations.*;
import com.sun.btrace.BTraceUtils;@BTrace
public class HelloWorld {@OnMethod(clazz="java.io.File",method="")
public static void onNewFileCreated(String fileName) {BTraceUtils.println("New file is being created");BTraceUtils.println(fileName);
}
每个BTrace脚本均由探针(Aspects lang语中的切入点)和操作(建议)组成。 探针定义何时应执行检测。 动作定义了检测。
探针可以包括以下内容:
- 方法进入/退出
- 电话号码
- 字段已更新/已访问
- 方法调用/返回(在指定方法内)
- 异常抛出(之前)
- 同步进入/退出
- 计时器
- 构造器入口
BTrace的能力和局限性
能力
- 动态连接到任何Java6 +应用程序并运行任何(*)代码
局限性
- 出于安全考虑,必须与运行跟踪应用程序的用户使用同一用户运行
- 仅支持Hotspot JVM
- 与目标应用程序分开编译–不熟悉应用程序类
- 可能会破坏目标应用程序–我在寿命很长的设置上运行了BTrace,该设置包含很多跟踪脚本。 目标应用程序甚至没有崩溃过。
先进的BTrace
BTrace社区实际上由一个定期在项目上工作的开发人员组成。 因此,不要期望在接下来的版本中有太多的改进和许多新功能。 (这是一个为项目做出贡献的好机会,因为每个开发人员都会极大地促进开发工作)。
该项目的文档应该得到显着改善–我发现自己在将这个框架集成到我现有的框架中时曾多次猜测。 BTrace论坛是获取有关框架答案的好方法。
为了了解BTrace的魔力是如何工作的,需要三个领域的知识-“ Java代理开发”,“ java中的字节码操作”和“ Java附加api”。 我将来可能会写一些这些领域。
相关链接
http://www.parleys.com/#st=5&id=1618&sl=1
http://kenai.com/projects/btrace
参考: The Art of Java博客的JCG合作伙伴 Art Gourevitch 对BTrace的介绍 。
翻译自: https://www.javacodegeeks.com/2012/06/introduction-to-btrace-for-java.html
java btrace
java btrace_BTrace for Java应用程序简介相关推荐
- 「小程序JAVA实战」微信小程序简介(一)
转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-01/ 一直想学习小程序,苦于比较忙,加班比较多没时间,其实这都是理由,很多时候习惯了搬砖,习惯了固 ...
- java btrace_BTrace:Java开发人员工具箱中的隐藏宝石
java btrace 这篇文章是关于BTrace的 ,我正在考虑将其作为Java开发人员的隐藏宝藏. BTrace是用于Java平台的安全,动态跟踪工具. BTrace可用于动态跟踪正在运行的Jav ...
- 从Java代码到Java堆理解和优化您的应用程序的内存使用
从Java代码到Java堆理解和优化您的应用程序的内存使用 简介: 本文将为您提供 Java? 代码内存使用情况的深入见解,包括将 int 值置入一个Integer 对象的内存开销.对象委托的成本和不 ...
- Java异常(一) Java异常简介及其架构
概要 本章对Java中的异常进行介绍.内容包括: Java异常简介 Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.htm ...
- java第一章Java语言概述和入门程序
文章目录 Java课程简介 1.1 Java概述(Java的发展) 1.2 Java 的特点 不依赖平台 1.3 java软件平台安装和配置 java程序开发 含有psvm的是主类 入口 java类默 ...
- 小师妹学JVM之:java的字节码byte code简介
文章目录 简介 Byte Code的作用 查看Byte Code字节码 java Byte Code是怎么工作的 总结 简介 Byte Code也叫做字节码,是连接java源代码和JVM的桥梁,源代码 ...
- java 8 stream中的Spliterator简介
文章目录 简介 tryAdvance trySplit estimateSize characteristics 举个例子 总结 java 8 stream中的Spliterator简介 简介 Spl ...
- 定义入栈java_小师妹学JVM之:java的字节码byte code简介
简介 Byte Code也叫做字节码,是连接java源代码和JVM的桥梁,源代码编译成为字节码,而字节码又被加载进JVM中运行.字节码怎么生成,怎么查看字节码,隐藏在Byte Code背后的秘密是什么 ...
- libsvm java 实例_LibSVM Java API调用示例程序
[实例简介] LibSVM Java API调用示例程序 Eclipse 完整工程可以运行 相关详情见http://blog.csdn.net/yangliuy/article/details/804 ...
最新文章
- python函数的定义域_python中多线程的变量定义域问题
- hdfs du命令是算的一份数据
- vue中子组件向父组件传递数据(实现加减的实例)
- filter_var()函数
- c语言限制字符数,C语言中“不受限制”的字符串函数总结.pdf
- 【SP26073】DIVCNT1 - Counting Divisors 题解
- java 使用logback进行日志输出
- HTTP劫持 方面了解和学习
- Python2.x(3.x)安装及Ulipad的安装和使用
- C#上使用Echarts做报表
- 接口测试用例生成工具介绍及应用
- cmd批量修改文件名 增加文字_如何批量修改文件名称,如何批量修改文件标题
- 火车票软件哪个好用_买火车票哪个软件好用 哪个软件买火车票便宜
- 庐山石刻分布及实习感想
- 软件测试的分类有哪些?
- 平面解析几何----余弦定理求焦点三角形的面积
- 数据库的应用(概念)
- 创客教育中的空间设计实物原理
- html 用event.keycode控制只能输入小写字母,event.keyCode键码值表 附只能输入特定的字符串代码...
- PyCharm快捷键(替换和查找)
热门文章
- Java 8 日期和时间解读
- VS2012找不到EF框架实体模型的解决方法
- 《四世同堂》金句摘抄(十五)
- ssh(Spring+Spring mvc+hibernate)——IDeptService.java和IEmpService.java
- Github Pages + Jekyll 独立博客一小时快速搭建上线指南
- bean交个spring和new比较区别
- java动态代理和cglib动态代理
- Unicode® Character Name Index
- Nginx 部署 Vue 项目刷新页面出现404
- dmn是大脑中哪个区域_DMN中的函数式编程:感觉就像再次重读我的大学课程一样...