用Class.newInstance()创建实例快,还是用new创建实例快?
1.Class loaderClass = Class.forName("MyClass");
Object object = loaderClass.newInstance();
2.MyClass temp=new MyClass();
请问哪种方式更快?
问题点数:100、回复次数:11Top
1 楼sunjie1981()回复于 2005-05-22 23:53:42 得分 0
当然后者,前者要先加载然后才可以得到实例Top
2 楼yxp810325(bearbear)回复于 2005-05-23 00:03:56 得分 0
研究过jdk源代码发现Class的newInstance()方法创建实例,实际上是用到了Constructor对象,Class有一个cachedConstructor对象。每次创建对象的时候都是调用cachedConstructor.newInstance()创建实例,你说的每次都得加载我认为只加载一次呀,因为虚拟机为每一个特定的类提供唯一一个Class对象管理这个类。因为cachedConstructor已经缓存了,所以在多线程调用创建对象的时候是cachedConstructor.newInstance()快,还是new快?Top
3 楼sunshine5246(阳光)回复于 2005-05-23 07:20:35 得分 0
帮顶
学习Top
4 楼cutelion(MADEinCNNC)回复于 2005-05-23 08:44:22 得分 0
關注中。。。。。。Top
5 楼Polarislee(北极星)(无房无车,飘在北京)回复于 2005-05-23 08:57:32 得分 30
每个类只会被加载一次,不会有第二次。
不过Class.newInstance会启动一系列的reflection机制,最终执行创建过程,肯定是要慢一些的。Top
6 楼OnlyFor_love(『勾勾手指头 一辈子不分手』)回复于 2005-05-23 09:10:27 得分 30
前者使用反射机制去创建一个实例,后者是普通的new一个对象!
不能说哪个好哪个不好!
一般在平常的创建实例过程中都采用new的方式,不过在数据库连接时,都是采用反射机制的!Top
7 楼CAYU(中原)回复于 2005-05-23 09:46:55 得分 0
2.MyClass temp=new MyClass();Top
8 楼treeroot(旗鲁特)回复于 2005-05-23 10:23:45 得分 30
当然是new快,编译时就知道类型了,很容易优化
用反射要运行时才知道是什么类型Top
9 楼enrico(小甭)回复于 2005-05-23 10:46:40 得分 0
学习Top
10 楼josephlong(josephlong)回复于 2005-05-23 10:48:19 得分 0
支持用new方法,用第一方法经常会出现问题的
上项目找项目就到erp商务网
www.chinaident.comTop
11 楼snage(霹雳狂刀)回复于 2005-05-23 10:53:25 得分 10
作个测试不就知道了啊!
class MyClass{}
public class Tester{
public static void getTime(){
System.out.println(System.currentMillsTime());
}
public static void main(String[] args){
Tester.getTime();
Class loaderClass = Class.forName("MyClass");
Object object = loaderClass.newInstance();
Tester.getTime();
MyClass temp=new MyClass();
Tester.getTime();
}
}
手头没有jdk,代码也没有调试,就是个这思路吧!!!看看时间差就知道了
Top




