之前有写 基于AOP的日志调试 讨论一种跟踪Java程序的方法, 但不是很完美.后来发现了 Btrace , 由于它借助动态字节码注入技术 , 实现优雅且功能强大. 只不过, 用起来总是磕磕绊绊的, 时常为了跟踪某个问题, 却花了大把的时间调试Btrace的脚本. 为此, 我尝试将几种跟踪模式固化成脚本模板, 待用的时候去调整一下正则表达式之类的. 跟踪过程往往是假设与验证的螺旋迭代过程, 反复的用BTrace跟踪目标进程, 总有那么几次莫名其妙的不可用, 最后不得不重启目标进程. 若真是线上不能停的服务, 我想这种方式还是不靠谱啊. 为此, 据决定自己的搞个用起来简单, 又能良好支持反复跟踪而不用重启目标进程的工具. AOP AOP是Btrace, jip1等众多监测工具的核心思想, 用一段代码最容易说明: public void say(String words){ Trace.enter(); System.out.println(words); Trace.exit(); } 如上, Trace.enter() 和 Trace.exit() 将say(words)内的代码环抱起来, 对方法进出的进行切面的处理, 便可获取运行时的上下文, 如: 调用栈 当前线程 时间消耗 参数与返回值 当前实例状态 实现的选择 实现切面的方式, 我知道的有以下几种: 代理(装饰器)模式 设计模式中装饰器模式和代理模式, 尽管解决的问题域不同, 代码实现是非常相似,
日志标签 ‘java’
动态实时跟踪你的java程序
2011年8月15日HS4J Kit 介绍
2011年6月8日HS4J Kit是HS4J的贡献项目, 它的灵感来自ORM(对象关系映射), 通过使用Annotation(注解)对领域对象进行声明, 即可实现对HS4J的调用, 省去编写和维护较为底层的模板式代码. 举例而言, 在一个管理用户信息的业务场景中通常都会有: 01 class User { 02 Long id; 03 String name; 04 Integer age; 05 } 06 07 interface UserRepository { 08 void add(User user); 09 void delete(User user); 10 User findBy(long id); 11 void update(User user); 12 } 01 CREATE TABLE `user_t` ( 02 `id` int(10) unsigned
jvm垃圾回收
2011年5月12日在jvm中堆空间划分为三个代:年轻代(Young Generation)、年老代(Old Generation)和永久代(Permanent Generation)。年轻代和年老代是存储动态产生的对象。永久带主要是存储的是java的类信息,包括…