摘要:
在com.sun.imageio.plugins.bmp包中的BMPImageReader类中 public void readHeader() throws IOException { if (gotHeader) return; if (iis == null) { throw new IllegalStateException("Input source not set!"); } int profileData = 0, profileSize = 0; ... 阅读全文
摘要:
package sun.tools.javap; import java.util.*;
import java.io.*; /** * Central data repository of the Java Disassembler. * Stores all the information in java class file. * * @author Sucheta Dambalkar (Adopted code from jdis) */
public class ClassData implements RuntimeConstants { private ... 阅读全文
摘要:
这几天新项目每次发布,都发现load在jetty重启过程中突然load会从0.1突然升高到15以上,3分钟后慢慢降到正常非常,cpu使用率也升高了一些,但是jvm内存线程,gc都比较正常,所以怀疑应用已启动,执行了一些耗CPU的处理过程,查看了代码之后,应用已启动,执行最多的方法是dowork,而这个方法里面会有解析xml的过程: public OfferInfo parseXml(String content) throws NumberFormatException, XMLStreamException { if (content == null || conten... 阅读全文
摘要:
接之前的博客http://zhwj184.iteye.com/admin/blogs/1630756关于asm使用的示例,这次使用asm来动态统计每个方法的执行时间,实现AOP功能。AOP的更通用的做法是对原始类动态生成子类,调用子类的方法覆盖父类,来实现AOP的功能。著名的 Hibernate 和 Spring 框架,就是使用这种技术实现了 AOP 的“无损注入”。下面我们就通过一个示例来对方法Foo.execute调用时动态注入方法执行前后的时间统计来统计方法的执行时间import java.io.FileOutputStream;
import java.io.IOException;
阅读全文
摘要:
asm 4.0 版本http://forge.ow2.org/plugins/scmsvn/index.php?group_id=23asm是java的字节码操作框架,可以动态查看类的信息,动态修改,删除,增加类的方法。下面基于4.0版本的一个使用示例,演示了对类Foo进行修改方法名称,增加方法,修改方法内容等import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method 阅读全文
摘要:
今天使用velocity在java后台渲染一个map<Long,String>对象到vm模板上,通过get(111)获取不到map的对象的值分析。这是velocity1.6.4的处理,以后版本是不是解决了这个问题可以再查,个人认为在vm文件支持跟java一样加个L表示long之类的处理应该不难。具体代码如下:后台java生成设置代码Map<Long,String> map = new HashMap<Long,String>(); map.put(101L,"aaa"); map.put(102L,"bbb"); co 阅读全文
摘要:
继上次分析了java的序列化过程之后,对于serialVersionUID的处理还不是很清晰,今天再看下代码,对serialVersionUID的处理进行了了解,上次的序列化过程分析可以参考另外一篇文章:http://zhwj184.iteye.com/blog/1550699ObjectOutputStream.java调用writeObject的时候会调用到下面的代码:这是调用ObjectStreamClass.java的writeNonProxy方法,写入非代理类的元数据信息在写入类的元数据的时候会把serialVersionUID写入: /** * Writes non-p... 阅读全文
摘要:
我看到的最多被违反的原则是“命令,不要去询问(Tell, Don’t Ask)”原则。这个原则讲的是,一个对象应该命令其它对象该做什么,而不是去查询其它对象的状态来决定做什么(查询其它对象的状态来决定做什么也被称作‘功能嫉妒(Feature Envy)’)。这篇文章里有个很生动的例子,我至今记忆犹新:if (person.getAddress().getCountry() == “Australia”) {这违反了得墨忒耳定律,因为这个调用者跟Person过于亲密。它知道Person里有一个Address,而Address里还有一个country。它实际上应该写成这样:if (person.l 阅读全文
摘要:
Tcpdump是linux下的网络数据包分析工具,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具,尤其其提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计 阅读全文
摘要:
netfilter是linux的内核网络框架,提供了5个hook点,iptable和lvs都是基于netfilter上的一些实现。58同城的DRM(Dynamic Resource Manager)系统是一个基于netfilter上的集负载均衡,自动部署,资源的动态分配与一体的高可用,高效率,高弹性的平台,目标是实现根据用户请求创建销毁服务实例;实现分时共享资源,提高资源利用率;实现服务的自动部署,集中管理。有兴趣的可以参考下这篇文章:http://www.ibm.com/developerworks/cn/linux/l-ntflt/qcon上也有58同城的互联网高弹性架构设计分享,也是讲到 阅读全文