JDK
firestone-sh
技术的蜗牛
展开
-
jvisualVM profiling分析
1. 用jdk1.6自带的JVisualVM版本好像比较低,最好用比较新的,比如我用过1.3.12. to profile a remote app such as in a remote linux machine, we need to start JMX port in remote app as this wayjava -Dcom.sun.management.jmxre...原创 2012-06-29 22:34:34 · 187 阅读 · 0 评论 -
单例类
单例类中考虑到的有:1. 私有的构造函数2. static final 的instance域3. 多线程环境下,double check考虑4. 单例类如果实现了Serializable接口(直接或者间接),需要添加一个 readResolve() 方法,用instance域替换掉Serialization机制自动生成的实例类对象 private Object r...原创 2011-02-09 20:10:11 · 68 阅读 · 0 评论 -
深入Java虚拟机
1. 能否自己写一个java.lang.Virus类用?该类能否获取java.lang包的包访问权限? 问题一答案是yes, 这个自定义的Virus类可以由用户类类装载器装载(就是不是启动类,扩展类,classpath类装载器的那个装载器)问题二答案是No,因为包访问权限必须是同一个类装载器下的包中的类。位于java.lang中的系统类都是由启动类装载器装载的,自定义的java.lan...原创 2010-11-03 09:27:50 · 77 阅读 · 0 评论 -
Java正则表达式
转自:http://hi.baidu.com/xu_yunan/blog/item/7ce5d93bb279d22c96ddd843.html 1. 用户名正则表达式模式^[a-z0-9_-]{3,15}$^ # 行开始 [a-z0-9_-] # 匹配列表中的字符,a-z,0–9,下划线,连字符...原创 2010-10-23 21:42:18 · 165 阅读 · 0 评论 -
HotSpot GC
按代的垃圾收集机制, 主要分为三种: 复制算法,空间被分为等大的两块,从根开始访问每一个关联的活跃对象,将空间 A 的活跃对象全部复制到空间 B,然后一次性回收整个空间 A,优点:只访问活跃对象,将所有活动对象复制走之后就清空整个空间,不用去访问死对象,所以遍历空间的成本较小,缺点:需要巨大的复制成本和较多的内存; 标记清除算法,从根开始访问所有活跃对象,标记为活跃对象。然后再遍历一次...原创 2010-10-14 08:22:03 · 87 阅读 · 0 评论 -
类的初始化
类的初始化顺序:1. 静态初始化块2. main函数中的输出(调用构造函数前)3. 实例的初始化块(初始化匿名内部类的地方)4. 构造函数初始化 import static java.lang.System.out;public class InitializerDemo { public InitializerDemo() { out....原创 2010-07-06 08:20:51 · 68 阅读 · 0 评论 -
多线程同步
1. synchronized语句 同步的代码块尽量少 locks split, 私有的对象锁代替this 2. volatile for double, long primitive type. 3. ThreadLocal 4. 使用 JDK1.5提供的锁 java.util.concurrent.locks.Lock, java.uti...原创 2010-08-17 17:10:35 · 67 阅读 · 0 评论 -
java中的动态代理
jdk中动态代理只支持接口的方式 实现方式是: 1. 调用 java.lang.reflect.Proxy中的静态方法 newProxyInstance(ClassLoader loader, Class[] interfaces, ...原创 2010-08-17 14:13:29 · 79 阅读 · 0 评论 -
方法中的异常声明属于方法签名吗?
1. 异常是方法执行完后才抛出的,跟返回结果相似,从这个角度来说不应该是方法签名的一部分。我们知道,如果根据不同的返回类型来区别签名从而达到重载的目的是不允许的,因为方法在没有返回前系统是不知道该选择哪个方法来执行的。Java中也不允许仅仅异常声明不一样的方法进行重载。 2. 异常在接口实现,方法继承中只能变的越来越少(变窄)。也即父类异常声明必须包括(或者说是子类异常的父类)子类异常声明...2010-08-17 06:50:16 · 745 阅读 · 0 评论 -
如何简单的得到Java进程的stack trace dump
最简单直接变态的方法是:找到这个java进程的id(linux下的ps或者windows下的jps),直接kill掉。java虚拟机会立即dump stack trace。原创 2010-12-13 22:25:17 · 353 阅读 · 0 评论 -
checked and unchecked exception
checked 和 unchecked exception 的区别,资深一点的Java程序员都知道。这里我感兴趣的是该怎么用checked 和 unchecked exception. 最早的exception处理机制来自C++,在C中为了避免错误,我们会根据返回结果或者判断状态(文件操作)来保证程序的正确性。这样在代码中就会有大量的if/else判断最后甚至让读代码的人忘了程序片段的真正...2010-07-11 13:21:08 · 124 阅读 · 0 评论 -
Java虚拟机
摘自: http://www.ibm.com/developerworks/cn/java/j-lo-jvm-perf/ JVM 的实现Sun Hotspot、IBM J9、Oracle JRockit 一. Java 堆和栈 类装载子系统:通过类的全限定名(包名和类名,网络装载还包括 URL)将 Class 装载进运行时数据区; ...原创 2010-01-11 10:24:07 · 105 阅读 · 0 评论 -
JDK中用到的设计模式
1. java.io 中用到了装饰模式和适配器模式装饰模式,In general, each read request made of a Reader causes a corresponding read request to be made of the underlying character or byte stream. It is therefore advisable to...原创 2011-02-19 19:28:18 · 158 阅读 · 0 评论 -
jdk泛型
1. 泛型不是协变的List<Object> 不是 List<String> 的父类型。 2. 问号 类型通配符。List<?> 是任何泛型 List 的父类型,所以您可以将 List<Object>、List<Integer> 或 List<List<List<String>>&am原创 2011-07-02 22:09:27 · 175 阅读 · 0 评论 -
Eclipse GC log
为了查看Eclipse GC log,需要在eclipse.ini 中加入 -XX:+PrintGCTimeStamps-XX:+PrintGCDetails-verbose:gc-Xloggc:gc.log 在Eclipse安装目录查看gc.log 9.768: [Full GC 9.769: [Tenured: 7678K->9025K(2...原创 2011-12-02 19:31:21 · 120 阅读 · 0 评论 -
java 常见排序算法
摘自http://deng5566.iteye.com/blog/678817,仅供自学。 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序 为了便于管理,先引入个基础类:package algorithms; /** * @author yovn * */public abstract class Sorter...原创 2011-10-26 22:25:40 · 55 阅读 · 0 评论 -
code review
Code Review时考虑到的有 a. 从Collection中remove出来的对象标记为null b. 少用静态变量,(全局变量,静态变量不会被GC自动回收?) c. 避免把生命周期不同的对象堆在一起成为一个大的对象 d. JDBC Connection/Statement/ResultSet异常正确处理。 e. 按代GC算法下,尽...原创 2011-07-24 10:50:29 · 87 阅读 · 0 评论 -
有趣的java类
1. WeakHashMap作用:访问这个map时会检查所有entry,如果有key是not reachable,(GC中的概念), 就会purge该entry 场景:比如我们有这个一个接口,接口中有add/remove方法。主要是维护子类中HashMap中的对象。要求是调用者自己负责add/remove对象。忘掉remove对象的话可能会OOM。这时候可以采用WeakHashMap...原创 2011-07-24 10:20:14 · 211 阅读 · 0 评论 -
Class Loader
学习ClassLoader有几个关注点:From: http://www.ibm.com/developerworks/cn/java/j-lo-classloader/index.html 1. java.lang.ClassLoader 中的关键方法 方法说明getParent() 返回该类加载器的父类加载器。...原创 2010-11-26 14:18:31 · 98 阅读 · 0 评论 -
ClassNotFoundException and NoClassDefFoundError
From: http://jroller.com/sjivan/entry/difference_between_classnotfoundexception_and_noclassdeffounderror A ClassNotFoundException is thrown when the reported class is not found by the ClassLoad...原创 2010-11-26 13:51:16 · 137 阅读 · 0 评论 -
如何避免两个对象的相互引用引起的堆栈溢出
两个对象相互引用,并且这种引用关系定义在构造函数中时,初始化这种对象会引起堆栈溢出。因为对象1的初始化调用了对象2的初始化,反之亦然。这样会构成死循环。解决方法是用一个无参数的构造函数代替。对象的引用依赖关系通过Set方法在对象初始化之后设置进去。当然一个缺点是需要注意无参数构造函数生成的对象是一个不完整的对象。...原创 2010-11-21 07:38:02 · 732 阅读 · 0 评论 -
java 对象状态
对象一共有六种状态: 强引用有三种, 可触及的:从根节点出发可到达该对象可复活的: 已经没有对象引用它了,但可能从finalize()终结函数中调用使其复活不可触及的: 没有其他对象引用,也不会因为终结函数复活 三个引用对象,软引用弱引用影子引用引用对象指向目标对象。强引用的目标对象不会被GC回收,弱引用并不禁止目标对象被回收。这里的强弱是正对目标对...原创 2010-11-15 17:43:26 · 142 阅读 · 0 评论 -
java 中多继承
我们知道,java是不支持多继承的。要实现此目的,方法一:改为接口,Java支持实现多个接口 方法二:采用内部类,内部类可以访问外部类的成员,达到继承同样的目的。...原创 2010-11-14 09:58:04 · 61 阅读 · 0 评论 -
动态加载类的方式
背景知识:类的初始化前还需要有两个阶段:load和连接。连接又分为验证(),准备(类型 内存),解析(符号引用解析成直接引用)三个阶段。 动态加载类有java.lang.Class.forName() 和 自定义ClassLoader的loadClass()两种方式。区别是loadClass方式并不能保证类被初始化了(有个带resolve参数的接口已经被废弃了)。而forName方式有个参...原创 2010-11-08 12:29:30 · 98 阅读 · 0 评论 -
通过网络加载类
RMI / RPC / Web Service 调用时需要客户端服务端维护同样的调用接口? 利用java的对象流传送对象,将服务器端的任务以对象的方式传送给客户端,客户端同样适用对象流接收任务,并复原对象的各个属性。ObjectOutputStream和ObjectInputStreamObjectOutputStream在传送对象的时候要求对象是实现了序列化接口的,这要求在...原创 2011-03-14 09:21:41 · 231 阅读 · 0 评论 -
在classpath上搜索类
编译器在当前的classloader的classpath上找到类.方法(名字相同的即可,不需要签名相同),并在其中挑选(可能有重载)一个。如果没有找到签名相同的并不会到别的class library中或者上一级classloader中去寻找,而是直接报错。除非当前类中根本就没有这个名字的方法。 sorry, 上面的理解是错误的。真实的原因是“方法遮蔽”造成的。比如内部类中方法会遮蔽同名(可...2010-03-16 08:39:20 · 96 阅读 · 0 评论 -
覆盖重载隐藏遮蔽遮掩
1. override 覆写 用于实例方法,签名相同,动态分派 a) 子类方法限定要大于等于父类。即限定变大了。 b) Never add exception types to the throws clause of a method overridden in a subclass 也即不能添加更多的异常到子类签名中。可以是父类异常的子类异常,...2010-03-13 20:42:32 · 141 阅读 · 0 评论 -
java中的动态代理
jdk中动态代理只支持接口的方式 实现方式是: 1. 调用 java.lang.reflect.Proxy中的静态方法 newProxyInstance(ClassLoader loader, Class[] interfaces, Invocati原创 2012-10-08 13:55:51 · 284 阅读 · 0 评论 -
方法中的异常声明属于方法签名吗?
1. 异常是方法执行完后才抛出的,跟返回结果相似,从这个角度来说不应该是方法签名的一部分。我们知道,如果根据不同的返回类型来区别签名从而达到重载的目的是不允许的,因为方法在没有返回前系统是不知道该选择哪个方法来执行的。Java中也不允许仅仅异常声明不一样的方法进行重载。 2. 异常在接口实现,方法继承中只能变的越来越少(变窄)。也即父类异常声明必须包括(或者说是子类异常的父类)子类异常声明。这个可原创 2012-10-08 13:55:42 · 1114 阅读 · 0 评论 -
checked and unchecked exception
checked 和 unchecked exception 的区别,资深一点的Java程序员都知道。这里我感兴趣的是该怎么用checked 和 unchecked exception. 最早的exception处理机制来自C++,在C中为了避免错误,我们会根据返回结果或者判断状态(文件操作)来保证程序的正确性。这样在代码中就会有大量的if/else判断最后甚至让读代码的人忘了程序片段的真正意图。因原创 2012-10-08 13:55:32 · 436 阅读 · 0 评论 -
在classpath上搜索类
编译器在当前的classloader的classpath上找到类.方法(名字相同的即可,不需要签名相同),并在其中挑选(可能有重载)一个。如果没有找到签名相同的并不会到别的class library中或者上一级classloader中去寻找,而是直接报错。除非当前类中根本就没有这个名字的方法。 sorry, 上面的理解是错误的。真实的原因是“方法遮蔽”造成的。比如内部类中方法会遮蔽同名(可以不考虑原创 2012-10-08 13:54:58 · 407 阅读 · 0 评论 -
覆盖重载隐藏遮蔽遮掩
1. override 覆写 用于实例方法,签名相同,动态分派 a) 子类方法限定要大于等于父类。即限定变大了。 b) Never add exception types to the throws clause of a method overridden in a subclass 也即不能添加更多的异常到子类签名中。可以是父类异常的子类异常,甚至不加异常。所原创 2012-10-08 13:54:54 · 488 阅读 · 0 评论 -
Java虚拟机
摘自: http://www.ibm.com/developerworks/cn/java/j-lo-jvm-perf/ JVM 的实现Sun Hotspot、IBM J9、Oracle JRockit 一. Java 堆和栈 类装载子系统:通过类的全限定名(包名和类名,网络装载还包括 URL)将 Class 装载进运行时数据区; 方法区:Class 对于所有方法和 static 静态原创 2012-10-08 13:54:26 · 283 阅读 · 0 评论 -
Java EE 5编程模型
From http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0809_alcott/0809_alcott.html 1. 引入IOC 和 Annotation 编程模型注入指定的对象和资源 1.1 @EJB 1.2 @WebService, JAX-WS 2. EJB -> POJO, JPA, EJB原创 2012-10-08 13:38:06 · 313 阅读 · 0 评论 -
Date in Java
以下两个是同一个时间: UTC, Coordinated Universal Time (UTC), use time zone of GMT GMT, Greenwich Mean Time 标准时间 18:00 GMT = 18:00+00:00 在用 java.text.SimpleDateFormat("yyyy-MM-dd原创 2012-10-08 13:39:57 · 472 阅读 · 0 评论 -
Java Notes
1. In JDK5, Annotation is introduced. Annotation just simplify programming, not for performance raising2. DD(deployment description) over Annotation3. CoC, Convention over Configuration4. DRY, Don't R原创 2012-10-08 13:37:40 · 250 阅读 · 0 评论 -
多线程同步
1. synchronized语句 同步的代码块尽量少 locks split, 私有的对象锁代替this 2. volatile for double, long primitive type. 3. ThreadLocal 4. 使用 JDK1.5提供的锁 java.util.concurrent.locks.Lock, java.util.concurrent.locks原创 2012-10-08 13:55:53 · 229 阅读 · 0 评论 -
类的初始化
类的初始化顺序:1. 静态初始化块2. main函数中的输出(调用构造函数前)3. 实例的初始化块(初始化匿名内部类的地方)4. 构造函数初始化 import static java.lang.System.out;public class InitializerDemo { public InitializerDemo() { out.println("in construc原创 2012-10-08 13:55:25 · 237 阅读 · 0 评论 -
HotSpot GC
按代的垃圾收集机制, 主要分为三种: 复制算法,空间被分为等大的两块,从根开始访问每一个关联的活跃对象,将空间 A 的活跃对象全部复制到空间 B,然后一次性回收整个空间 A,优点:只访问活跃对象,将所有活动对象复制走之后就清空整个空间,不用去访问死对象,所以遍历空间的成本较小,缺点:需要巨大的复制成本和较多的内存; 标记清除算法,从根开始访问所有活跃对象,标记为活跃对象。原创 2012-10-08 13:56:31 · 453 阅读 · 0 评论 -
Java正则表达式
转自:http://hi.baidu.com/xu_yunan/blog/item/7ce5d93bb279d22c96ddd843.html 1. 用户名正则表达式模式^[a-z0-9_-]{3,15}$^ # 行开始 [a-z0-9_-] # 匹配列表中的字符,a-z,0–9,下划线,连字符 {原创 2012-10-08 13:56:35 · 459 阅读 · 0 评论