之前有写 基于AOP的日志调试 讨论一种跟踪Java程序的方法, 但不是很完美.后来发现了 Btrace , 由于它借助动态字节码注入技术 , 实现优雅且功能强大.
只不过, 用起来总是磕磕绊绊的, 时常为了跟踪某个问题, 却花了大把的时间调试Btrace的脚本. 为此, 我尝试将几种跟踪模式固化成脚本模板, 待用的时候去调整一下正则表达式之类的.
跟踪过程往往是假设与验证的螺旋迭代过程, 反复的用BTrace跟踪目标进程, 总有那么几次莫名其妙的不可用, 最后不得不重启目标进程. 若真是线上不能停的服务, 我想这种方式还是不靠谱啊.
为此, 据决定自己的搞个用起来简单, 又能良好支持反复跟踪而不用重启目标进程的工具.
HS4J Kit 介绍
jvm垃圾回收
在jvm中堆空间划分为三个代:年轻代(Young Generation)、年老代(Old Generation)和永久代(Permanent Generation)。年轻代和年老代是存储动态产生的对象。永久带主要是存储的是java的类信息,包括解析得到的方法、属性、字段等等。永久带基本不参与垃圾回收。我们这里讨论的垃圾回收主要是针对年轻代和年老代。具体如下图。
FileExtendedAttributes的进化过程
正忙于的系统需要用到linux文件系统的扩展属性的特性, 由于jdk6还未能提供API上的支持, 只好选用JNA来调用Native方法实现了.
支持配额的共享线程池
让代码取代你的配置文件吧
最近, 在编写一个专门压测NameNode的工具(以下简称s4nn), 它有两个难点 :
Thrift Message deserialize 方法的一个缺点及改进
今天在写code时,要调用thrift的TDeserializer.deserialize()方法,发现其提供的接口很不好用。会导致应用代码的多一次copy。
一个cache的改造过程
在分布式的程序中,cache的合理使用可以带来性能上的极大提升,尤其是在资源创建需要昂贵的开销时。cache的设计最重要的是要保证线程安全和高效性。下面以代码为例,介绍了三种cache的写法。
应用DirectBuffer提升系统性能
Java 2 SE 6 doc :
netty应用中接收缓存覆写的陷阱
version : netty-3.2.1.final

近期评论