维护DAO类实例池与执行新运算符

时间:2010-04-05 19:35:35

标签: java reflection

我们一直试图以多种方式对我们的应用程序性能进行基准测试。 我一直认为使用Class.newInstance()在java中创建对象并不慢(至少在1.4版本的java之后)。但我们总是做一个测试,使用newInstance方法vs mainitain一个1000个对象的对象池。我们使用JDBC完成了大约200K迭代从DB加载数据并填充这些对象。 我很惊讶(甚至震惊)看到newInstance代码与对象池代码相比差不多慢了10倍。

这些对象表示包含大约50个字段和所有字符串类型的表。

有人可以分享关于这个问题的想法,因为现在我更加困惑,如果至少一些DAO实例的对象池是更好的选择。我现在看到的池大小应足够大,以满足平均请求的大小。 还有另一面,因为我的内存占用量会增加,但我开始怀疑这种想法是否对于代表约50列或更多列的表的DAO实体至少是有意义的

请分享您的想法,如果有人试过,或者我在这里遗漏了一些内容,请告诉我

2 个答案:

答案 0 :(得分:0)

引用Java Concurrency in Practice

  

对对象池说“不”

对于您遇到的任何问题,可能有一个更简单的选择。例如,为什么要首先实例化这么多DAO实例?每次需要从数据库中检索数据时都会创建一个新的DAO实例吗?

为什么不在每次需要访问WhateverDao数据时重复使用Whatever的相同实例?只需确保DAO是线程安全的。

答案 1 :(得分:0)

DAO对象池是个坏主意。一个数据库连接池,是个好主意。我的问题是,你真的有哪些?如果您在每个DAO中打开一个连接,而没有汇集连接,那么您会看到更好的性能,因为您正在汇集连接,而不是因为您正在汇集DAO对象。 我的下一个问题是,你在构造函数中做了多长时间?如果您的构造函数执行起来很昂贵,那么对象池可能是个好主意。虽然,我真的想看看你在构造函数中做了什么......