代码之家  ›  专栏  ›  技术社区  ›  Fazal

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

  •  0
  • Fazal  · 技术社区  · 14 年前

    我们已经尝试以多种方式对应用程序性能进行基准测试了一段时间了。 我一直相信Java在对象中使用类创建是不慢的(至少在1.4版本的Java之后)。但无论如何,我们做了一个测试,在1000个对象的对象池中使用NewInstance方法和Mainitain。我们使用JDBC从数据库加载数据并填充这些对象,进行了大约20万次迭代。 看到新实例代码与对象池代码相比慢了近10倍,我感到惊讶(甚至震惊)。

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

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

    请分享你的想法,告诉我这是不是有人尝试过,还是我遗漏了一些要点

    2 回复  |  直到 14 年前
        1
  •  0
  •   matt b    14 年前

    引用自 Java Concurrency in Practice :

    对对象池说“不”

    不管你有什么问题,都有一个简单的选择。例如,为什么您首先要实例化这么多DAO实例?每次需要从数据库中检索数据时是否都会创建新的DAO实例?

    为什么不重新使用 WhateverDao 每次需要访问 Whatever 数据?只要确保DAO是线程安全的。

        2
  •  0
  •   Jim Barrows    14 年前

    一个DAO对象池是个坏主意。一个数据库连接池是个好主意。我的问题是,你到底有什么?如果您在每个DAO中打开一个连接,而不共享连接,那么您会看到更好的性能,因为您共享连接,而不是共享DAO对象。 我的下一个问题是,你在构造器中做什么花了这么长时间?如果您是构造函数,执行起来很昂贵,那么对象池可能是一个好主意。不过,我真的会考虑从构造器中得到你所做的一切…