代码之家  ›  专栏  ›  技术社区  ›  Jason Braucht

如何防止ApacheCXF将主要活动转换为对象类型?

  •  1
  • Jason Braucht  · 技术社区  · 17 年前

    我正在为一个项目评估ApacheCXF,所以我编写了一个小的演示应用程序来尝试一些东西。遵循cxf用户指南,我可以很快地启动和运行我的应用程序。

    我想测试的一件事是,cxf能够处理返回大量基元的方法有多好。所以我定义了一个方法 float[] getRandFloats(int count) '它只返回一个指定长度的数组,其中填充了随机数。查看由 java2wsdl ,我看到方法正确地指示返回类型 float[] . 检查客户端,我也看到我(最终)收到了 浮动[ ] .

    我注意到当我增加数组中元素的数量时,客户机性能会受到影响。我在客户端运行了一个分析器,发现 Float 为返回数组中的每个元素创建的对象。似乎当CXF在解析响应的过程中调用JAXB时,就会发生这种情况。

    我正在评估CXF是否与一个可能返回数百万个浮点数字的应用程序一起使用,因此这个对象创建是非常不需要的。为了使用cxf,我需要找到一种方法来防止这个对象创建的发生。我已经浏览了文档和邮件列表,但还没有找到解决这个问题的方法。

    是否有人在使用cxf时遇到类似的问题?如果是的话,你是怎么解决这个问题的?

    2 回复  |  直到 17 年前
        1
  •  2
  •   Daniel Kulp    17 年前

    这绝对不是CXF能做的。更像是JAXB的问题。我相信在内部,JAXB处理所有的“maxoccurs!=“1”作为Java集合的情况,而不是数组。如果需要,它只是转换为数组作为进程的最后一步。由于Java集合不能保存基元,所以它将是浮点对象。

    无论如何,这必须由JAXB的人来承担。:

        2
  •  0
  •   skaffman    17 年前

    你说当数组中元素的数量增加时,cliernt的性能会受到影响。这对我来说是合理的-更多的数据,更少的性能。你在那儿等什么?只要是线性退化,它的行为就可以。

    至于创建数以百万计的对象,现代的JVM可以做到这一点而不必费吹灰之力。我怀疑CXF的设计者很清楚这一点。旧的JVM有糟糕的GC算法,并且有数百万个对象在周围走动确实会造成问题,但现在已经不是这样了,特别是对于像您这里这样寿命很短的对象。

    因此,一方面,我们有大量数据导致的性能下降,以及数百万个对象被创建的事实。然而,没有证据表明这两个观察结果是相关的。

    推荐文章