Tag: 性能

什么是性能回归测试的最佳工具

我们的组织正在寻找一种工具来帮助每个版本进行性能测试。 我们发布了大量新软件,我们希望确保自上次发布以来关键function的性能没有减慢。 我们有C#和Java代码。 这可以是以下任何内容: 当我运行此function时,它需要<2秒 当我运行这组function时总共<5秒 等。 。 最好是使用我们的基本unit testing持续集成(nunit,junit,team city)和手写性能检查,还是有专门的工具可以帮助专注于这个领域。 有什么建议么?

任意预设精度小数(几乎与BigDecimal一样)

我希望有一个java类,它将保持一个具有任意预设精度的十进制值。 类BigDecimal看起来是一个很好的候选者作为起点,但我希望能够将小数的大小限制为最终用户决定的。 从字面上讲,最终用户将在基数10中指定范围,并且我将分配足够的字节来表示该范围内的任何数字。 我想有一个扩展BigDecimal的类。 在这个类中,我将添加模拟预设范围内的小数所需的函数。 我对社区的问题是:是否有任何图书馆已经这样做了? 扩展BigDecimal是否合理?

如何在计算过程中存储数百万的Double?

我的引擎正在对X交易执行1,000,000次模拟。 在每次模拟期间,对于每笔交易,可以validation特定条件。 在这种情况下,我将值(它是一个double )存储到一个数组中。 每笔交易都有自己的价值清单(即这些价值从一笔交易到另一笔交易都是独立的)。 在所有模拟结束时,对于每笔交易,我在他的List上运行一个算法来获得一些输出。 不幸的是,这个算法需要这些值的完整列表,因此,我无法修改我的算法来“即时”计算输出,即在模拟期间。 在“正常”条件下(即X为低,并且validation条件的时间少于10%),计算结束正确,即使可以增强。 当我有很多交易(例如X = 30 )并且我的几乎所有模拟都validation了我的特定条件(比如90%的模拟)时,我的问题就出现了。 所以只是为了存储值,我需要大约900,000 * 30 * 64bits 64位的内存(大约216Mb)。 我未来的要求之一是能够运行5,000,000次模拟…… 所以我无法继续目前存储值的方式。 目前,我使用了Map<String, List>的“简单”结构,其中键是元素的ID, List是值列表。 所以我的问题是如何增强我的应用程序的这个特定部分,以减少模拟过程中的内存使用量? 另外一个重要的注意事项是,对于最终的计算,我必须订购我的List (或我将使用的任何结构)。 因此,如果前一个问题的解决方案还提供了一个对新插入元素进行排序的结构(例如SortedMap ),那将非常棒! 我使用的是Java 1.6。 编辑1 我的引擎确实正在执行一些财务计算,在我的情况下,所有交易都是相关的。 这意味着我无法在第一笔交易中运行计算,获取输出,清理List ,然后转到第二笔交易,依此类推。 当然,作为临时解决方案,我们会增加分配给引擎的内存,但这不是我期望的解决方案;) 编辑2 关于算法本身。 我不能在这里给出确切的算法,但这里有一些提示: 我们必须处理已排序的List 。 然后我将计算一个索引(根据给定的参数和List本身的大小计算)。 然后,我最终返回此List的index-th值。 public static double algo(double input, List sortedList) { if (someSpecificCases) { return 0; […]

从Hibernate 3迁移到4会降低启动速度

我们正在尝试将我们的项目从hibernate 3迁移到hibernate 4.一切都运行良好,但问题是启动。 我们不使用JPA,我们使用直接hibernate与xml文件和映射文件。 com.informix.jdbc.IfxDriver jdbc:informix-sqli://xxx:xxx/xxx:INFORMIXSERVER=xxx xxx xxx org.hibernate.dialect.InformixDialect true false dev.xml generated.mappingFile属性是一个自己的属性。 在启动时,将加载该文件(dev.xml)。 这个文件看起来像这样: … 我们减少了这篇文章中的映射数量。 我们目前有超过500个映射 。 使用hibernate 3 ,加载所有映射需要2秒钟 。 使用hibernate 4需要2分钟 。 这是来自hibernate 3.2.GA的日志文件: 07:36:21,293 INFO [HibernateManager ] | Verwende Mapping-Collection Datei : /com/cargosoft/csedi/data/mappings_dev.xml 07:36:21,347 INFO [HibernateManager ] | Adding this resource to hibernate now : com/cargosoft/csedi/data/aart/Aart_DEV.hbm.xml 07:36:21,443 INFO [HibernateManager ] […]

Java中冗余导入语句的影响是什么?

什么是冗余的java import语句? 它们会影响编译的运行时(性能/大小)吗? 还是像intellisense这样的东西? 提出不同的问题:删除它们有多重要?

Java优化器和冗余arrays评估

这是关于Java优化的一个非常基本的问题。 如果你有一个简单的for循环迭代数组并在循环的头部使用array.length而不是之前评估它,那么你只做一次(这是我几乎总是这样做): for(int i=0; i<array.length;i++) { … } 可以对语句进行优化,以便JVM知道数组是否在循环的持续时间内发生变化,这样它每次都不会重新评估array.length吗?

为什么java.util.Arraylist#clear以OpenJDK的方式实现?

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#473 public void clear() { modCount++; // Let gc do its work for (int i = 0; i < size; i++) elementData[i] = null; size = 0; } 我的问题是,为什么他们必须通过支持数组{O(n)}进行循环才能使每个元素有资格进行垃圾收集,因为它们可以重新初始化后备数组,从而丢弃对整个数组的引用{ O(1)}并使其有资格进行垃圾收集? clear() O(n)表现对我来说似乎不太好,或者我错过了什么?

BeanUtils与ReflectionToStringBuilder的性能(用于Bean类)

我的Web应用程序中有大量的Java bean类,我试图找到一种在这些bean中实现toString()方法的简单方法。 toString()方法将用于整个应用程序的日志记录,并应打印bean中所有属性的属性值对。 我正在尝试两种选择: 1. BeanUtils.describe() (Apache commons-beanutils) 2. ReflectionToStringBuilder.toString() (Apache commons-lang) 由于这是一个预计会有高流量的Web应用程序,因此实现必须是轻量级的,不应影响性能。 (内存使用,处理器使用等是主要考虑因素)。 我想根据上面提到的标准知道哪些更好。 据我所知,reflection是一项繁重的操作,但更多细节和对这两种选项的深入了解将有助于我选择最佳解决方案。

在mapToInt之后调用map是否有任何优势,如果需要的话

我试图计算列表中值的平方和。 以下是三种变体,它们都计算出所需的值。 我想知道哪一个最有效率。 我期待第三个更高效,因为自动装箱只进行一次。 // sum of squares int sum = list.stream().map(x -> x * x).reduce((x, y) -> x + y).get(); System.out.println(“sum of squares: ” + sum); sum = list.stream().mapToInt(x -> x * x).sum(); System.out.println(“sum of squares: ” + sum); sum = list.stream().mapToInt(x -> x).map(x -> x * x).sum(); System.out.println(“sum of squares: ” + sum);

hibernate是否默认使用PreparedStatement

“Hibernate总是使用PreparedStatement来调用数据库” 这里引用。 如果是这样,那么hibernate缓存编译查询的位置,DB驱动程序是否会缓存它们。 我读到了关于c3p0的信息。 如果hibernate默认缓存PreparedStatement,那么c3p0中hibernate.c3p0.max_statements的用途是什么。 如果hibernate默认不这样做,那么连接池必须用于缓存预准备语句。 有人可以澄清这些。