草庐IT

PERFORMANCE

全部标签

java - 使循环更快的最佳实践 - 多线程是一种选择吗?

我用URL中的索引调用Api服务;例如,最后一个索引是:420.555。我这样做:for(inti=0;i性能很差。(当然,有很多条目要保存在我的数据库中,但它需要超过6个小时并且因为JAVAVM中的内存已满而崩溃)你有什么想法,我怎样才能更快地做到这一点?如果你需要完整的代码,我可以贴出来。但我认为for循环是问题所在...我的想法是,使用多线程,但我以前从未工作过,我不确定这是否是这种情况的最佳实践。当多线程是最佳实践时,你能给我举个例子吗? 最佳答案 您的代码:从URL中获取内容作为json做一些事情,然后将结果保存到数据库中

java - 每个子类继承关系表 : How to query against the Parent class without loading any subclass ? ?? ( hibernate )

假设一个每个子类继承关系的表可以在下面描述(来自wikibooks.org-参见here)注意父类不是抽象的@Entity@Inheritance(strategy=InheritanceType.JOINED)publicclassProject{@Idprivatelongid;//Otherproperties}@Entity@Table(name="LARGEPROJECT")publicclassLargeProjectextendsProject{privateBigDecimalbudget;}@Entity@Table(name="SMALLPROJECT")publi

java - 修改编辑距离算法以不计算所有距离

我正在研究模糊搜索实现,作为实现的一部分,我们使用Apache的StringUtils.getLevenshteinDistance。目前,我们正在为我们的模糊搜索寻求特定的最大平均响应时间。经过各种增强和一些分析后,花费最多时间的地方是计算Levenshtein距离。它大约占搜索字符串三个或更多字母的总时间的80-90%。现在,我知道这里可以做的事情有一些限制,但我已经阅读了以前的SO问题和LD的维基百科链接,如果有人愿意将阈值限制为设定的最大距离,那可以帮助减少花在算法上的时间,但我不确定如何准确地做到这一点。Ifweareonlyinterestedinthedistanceif

java - 平台默认字符编码如何影响跨平台性能

我读到使用平台默认字符编码是个坏主意,例如在读取文本文件和将文本导入数组等时。您能解释一下这会如何影响跨平台性能,以及如何解决这个问题吗?是否有应该用于跨平台应用程序的编码?谢谢 最佳答案 这与性能无关,而是与显示和阅读正确编码的文本有关。有很多方法可以解决这个问题:设置JVM选项-Dfile.encoding=utf-8总是使用带有字符编码参数的方法。这些是String、Reader、Writer等。我认为后者是必须的。如果你总是设置jvm选项,它会起作用,但如果你在某个时候忘记设置它,就会在随机的地方出现意想不到的失败。另一个问

java - 如何防止多次同时加载非缓存值?

如何防止以高效的方式同时多次加载缓存中不存在的值?一个典型的缓存用法是下面的伪代码:Objectget(Objectkey){Objectvalue=cache.get(key);if(value==null){value=loadFromService(key);cache.set(key,value);}returnvalue;}问题:在从服务(数据库、WebService、RemoteEJB或其他任何东西)加载值之前,可能会同时进行第二次调用,这将使值再次加载。比如我在缓存用户X的所有item,而这个用户经常被查看,有很多item,那么很有可能会同时调用他所有item的load,

java - 增强for循环

我经常遇到这样的情况,我想对从某个对象获取的某些集合或数组使用增强的for循环。例如items=basket.getItems();for(intitem:items){//Dosomething}另一种方法是:for(intitem:basket.getItems()){//Dosomething}在我看来,第二个更紧凑并提高了可读性,尤其是当item变量不会在其他任何地方使用时。我想知道for语句中的getter对性能有没有影响。它会被优化为类似于第一个的东西吗?还是每次都会访问setter/getter?当然getItems()可能会做一些很慢的事情(例如网络访问等)问题与其他问

java - 帕斯卡三角算法的时间复杂度是多少

任务是解决以下问题(帕斯卡三角形),看起来像这样。[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]我已经成功地实现了代码(见下文),但我很难弄清楚这个解决方案的时间复杂度。列表的操作数是1+2+3+4+....+n操作数会减少到n^2数学如何工作并转化为Big-O符号?我认为这类似于高斯公式n(n+1)/2所以O(n^2)但我可能错了非常感谢任何帮助publicclassSolution{publicList>generate(intnumRows){if(numRows>();;List>pyramidVal=newArrayList>();for(

java - int 数组与整数数组的性能

今天,当我向codeforces提交解决方案时,我使用了int[]数组,我的提交得到了TLE(超出时间限制)&在将其更改为Integer[]数组后,令人惊讶的是它得到了AC。我不明白性能是如何提高的。importjava.io.*;importjava.lang.reflect.Array;importjava.util.*;publicclassMain{staticclassTask{publicvoidsolve(InputReaderin,PrintWriterout)throwsException{intn=in.nextInt();Integer[]a=newInteger

java - 解读Java反射性能: Why is it surprisingly very fast?

我看到其他线程说java反射性能比使用非反射调用时慢10-100倍。我在1.6中的测试表明情况并非如此,但我发现了一些其他有趣的事情,我需要有人向我解释。我有实现我的接口(interface)的对象。我做了三件事1)使用对对象的引用我将该对象转换为接口(interface)并通过接口(interface)调用方法2)使用对实际对象的引用直接调用方法3)通过反射调用方法。我看到#1接口(interface)调用最快,紧随其后的是#3反射,但我注意到直接方法调用是最慢的。我不明白,我希望直接调用最快,然后是接口(interface),然后反射会慢得多。Blah和ComplexClass与主

java - 添加到大型 Java 集合,性能瓶颈

我正在尝试将一百万个对象添加到列表中。这样做所需的时间比我耐心等待的时间要长。进行每一步似乎也需要越来越长的时间。intsize=1000000;Dequecontent=newLinkedList();for(inti=0;i我尝试将内容添加到List、Set,结果非常相似。它启动很快,并在一些数字后窒息。我应该使用什么集合来存储大量相似的元素?我在这里遗漏了一些简单的东西吗? 最佳答案 这个问题一般不会出现在集合中,不会出现在LinkedList中(具有O(1)添加特性).因此,可能的嫌疑人正在抖动/交换内存。确保JVM有足够的