草庐IT

PERFORMANCE

全部标签

java - 如何自动化性能测试并与 CI 集成?

我正在考虑自动化性能测试,其方式与我们目前的单元测试相同。我知道如何使用jMeter等工具运行性能测试,或者通过编写自己的代码来触发应用程序的特定部分。我知道如何使用时间、jvisualvm、nmon或其他工具来收集有关正在使用的资源的信息。我想更进一步并编写一个性能测试,如果它超过某些线(执行时间、内存或CPU消耗...),它将失败。然后我会让我的CI服务器(Jenkins)定期运行测试以确保性能保持良好。这很复杂,因为性能取决于硬件,而以我目前的方式,它需要人工解释结果来决定这是否令人满意。您是否知道以这种方式帮助自动执行性能测试的任何工具或框架(如果可能的话,基于Java)?如果

Java 集合与内存数据库性能

我不确定是使用Java集合还是某些内存数据库(H2或HSQLDB-它们可能是最快的)。我需要一个好的性能结果-将有数百个对象/行,不会执行JOIN或更复杂的查询。我真的在考虑内存数据库,因为java堆的大小有限——我正在使用的对象可能非常大,而且会有很多(我提到的有数百个)您认为对大量数据使用内存数据库是个好主意吗? 最佳答案 数百个10KB的对象仍然只有几MB。保持简单是我的建议。数十万个1KB的对象仍然可以轻松放入32位JVM。在您处理GB级数据之前,我不会使用内存数据库。如果您有数百GB,您唯一的选择是使用某种数据库。免责声明

Java - 接口(interface)/基类引用 - 性能

这是在声明对象时使用接口(interface)/基类引用的一般编码实践:InterfaceIFref=newSomeObject();我知道这提供了松耦合,我们可以更改/编写具有新实现的新类,而不会影响太多代码。这个解释的很精彩herealso.但是我无法理解的一件事是:使用接口(interface)/基类引用是否会影响性能。如果是,那么这是正面影响还是负面影响。 最佳答案 直接使用类可能会更快,绝不会更慢。如果JVM看到一个具体的类,它就会知道“要调用谁”。不一定完全因为可能有子类,除非该类是最终的。甚至可能还有JVM尚未看到的子

java - 少量条目的 Java Map 最快实现

java.util.Map最快的实现是什么?对于极少数条目(少于15个元素左右)?线程安全和非线程安全。 最佳答案 如果所有条目都可以表示为枚举,请使用EnumMap:ThisimplementationcombinestherichnessandsafetyoftheMapinterfacewithaspeedapproachingthatofanarray.Ifyouwanttomapanenumtoavalue,youshouldalwaysuseanEnumMapinpreferencetoanarray.如果没有,Hash

java - 使用哪个 List 实现?

在我的程序中,我经常使用集合来存储对象列表。目前我使用ArrayList来存储对象。我的问题是:这是最佳选择吗?使用LinkedList可能更好?还是别的?要考虑的标准是:内存使用情况表现我需要的操作是:向集合添加元素遍历元素有什么想法吗?更新:我的选择是:ArrayList:)基于这个讨论以及以下讨论:WhentouseLinkedListoverArrayList?Listimplementations:doesLinkedListreallyperformsopoorlyvs.ArrayListandTreeList? 最佳答案

java - 为什么使用 char[] 而不是 String?

在Thread.java,第146行,我注意到作者在名称字段中使用了char[]而不是String。是否有任何我不知道的性能原因?getName()还在返回名称之前将字符包装在一个字符串中。只使用String不是更好吗? 最佳答案 一般来说,是的。我怀疑char[]是出于性能原因在Thread中使用的,那时候Java中的这些东西需要尽一切努力才能获得不错的性能。随着现代JVM的出现,这种微优化早已变得不重要,但它只是被遗弃了。旧的Java1.0时代的源代码中有很多奇怪的代码,我不会太在意它。

java - 一个循环中的两个操作与两个循环执行相同的操作每个循环一个

这个问题与此相同Twoloopbodiesorone(resultidentical)但就我而言,我使用Java。我有两个运行十亿次的循环。inta=188,b=144,aMax=0,bMax=0;for(inti=0;iaMax)aMax=t;}for(inti=0;ibMax)bMax=t;}在我的机器上运行这两个循环所需的时间约为4秒。当我将这两个循环融合成一个循环并在该循环中执行所有操作时,它会在2秒内运行。正如您所看到的,琐碎的操作构成了循环内容,因此需要恒定的时间。我的问题是我从哪里获得了这种性能改进?我猜测,在两个单独的循环中,性能受到影响的唯一可能地方是它递增i并检查i

java - 使用 lambda 表达式是否可以提高性能?

我有一个需求,检查两个列表中是否有共同的元素。我想出了两种方法来做到这一点:方法01:循环privatebooleanfunc01(Listlist1,Listlist2){for(Stringgroup:list1){for(StringfuncGroup:list2){if(group.equals(funcGroup)){returntrue;}}}returnfalse;}方法02:Lambdaprivatebooleanfunc02(Listlist1,Listlist2){returnlist1.stream().filter(list2::contains).findAn

java - Ant Junit 测试通过 Ant 运行的速度比通过 IDE 慢得多 - 要看什么?

我正在通过ant运行我的junit测试,它们的运行速度比通过IDE慢得多。我的Ant电话是:通过Ant运行时,在我的IDE中几乎瞬时运行的相同测试(0.067秒)需要4.632秒。过去,我已经能够通过使用junitfork参数来加速像这样的测试问题,但这在这种情况下似乎没有帮助。我可以查看哪些属性或参数来加快这些测试?更多信息:我使用的是来自IDE的报告时间与junit任务输出的时间。这不是Ant运行结束时报告的总时间。奇怪的是,这个问题已经自行解决了。是什么导致了这个问题?系统在本地磁盘上运行,所以这不是问题。 最佳答案 这是一个

java - 当通过 -Xmx 分配更多内存时,Sun JVM 会变慢吗?

当有更多内存可用并通过-Xmx使用时,SunJVM是否会变慢?(假设:机器有足够的物理内存,因此虚拟内存交换不是问题。)我问是因为我的生产服务器要进行内存升级。我想将-Xmx值提高到一些颓废。这个想法是为了防止由于我自己的编程错误不时发生的任何堆空间耗尽故障。罕见事件,但如果我有一个令人讨厌的-Xmx值,比如2048mb或更高,我快速发展的webapp可以避免它们。该应用程序受到严密监控,因此会注意到JVM内存消耗的异常峰值,并修复任何缺陷。可能的重要细节:Java6(在64位模式下运行)4核至强RHEL464位Spring,hibernate高磁盘和网络IO编辑:我试图避免发布我的J