草庐IT

Performance

全部标签

java - 对象类型转换的性能

对象类型转换在性能方面的成本如何?我应该尽可能避免类型转换吗? 最佳答案 它足够便宜,属于过早优化的范畴。不要浪费时间思考或提出问题,除非您分析了您的应用程序并确定这是一个问题,最重要的是:不要为了避免它而妥协您的设计。 关于java-对象类型转换的性能,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8803517/

java - Java 中是否有零时间、启动(无需重新编译)可切换条件标志?

我正在寻找一种方法来为if条件。当然,每次应用程序运行时,此条件只会更改一次-在启动时。我知道可以有条件地编译“条件下的编译时常量”,并且可以从代码中删除整个条件。但是,无需重新编译源代码的最快(并且可能最简单)的替代方案是什么?我可以移动条件以将.jar与带有条件的单个类和方法分开,在那里我生成该.jar的两个版本并将这些版本切换到类路径中应用程序启动?JIT是否会在单独的.jar中删除对方法的调用如果它发现该方法是空的?我能否通过在实现“ClassWithMyCondition”的类路径中提供两个类来做到这一点,其中一个类将有一个真正的实现,第二个将只有空方法并通过Class.fo

java - 计算出现次数的最有效方法?

我有一个字节数组(原始),它们可以有随机值。我试图以最有效/最快的方式计算它们在数组中的出现次数。目前我正在使用:HashMapdataCount=newHashMap();for(byteb:data)dataCount.put(b,dataCount.getOrDefault(b,0)+1);这个单行代码需要大约500毫秒来处理长度为24883200的byte[]。使用常规for循环需要至少600毫秒。我一直在考虑构造一个集合(因为它们只包含每个元素中的一个)然后使用Collections.frequency()将它添加到HashMap,但是构造一个从基元设置需要其他几个调用,所以

java - lambda 性能的差异?

This不是我的问题的重复。我检查了一下,它更多的是关于内部匿名类。我对Lambda表达式很好奇并测试了以下内容:给定一个包含一万个条目的数组,删除某些索引会更快:Lamba表达式或内部带有if测试的For循环?第一个结果并不令人惊讶,因为我不知道我会想出什么:finalintNUMBER_OF_LIST_INDEXES=10_000;ListmyList=newArrayList();String[]myWords="TestingLambaexpressionswiththisStringarray".split("");for(inti=0;ix.contains("s"));/

java - Java中Collection类的性能

全部,我浏览了很多网站,这些网站发布了各种Collection类针对各种操作(即添加元素、搜索和删除)的性能。但我也注意到,它们都提供了不同的测试环境,即操作系统、内存、线程运行等。我的问题是,是否有任何网站/Material在最佳测试环境的基础上提供相同的性能信息?也就是说,配置不应成为任何特定数据结构性能不佳的问题或催化剂。[更新]:例如,HashSet和LinkedHashSet插入一个元素的复杂度都是O(1)。然而,BruceEckel的测试声称LinkedHashSet的插入将比HashSet花费更多的时间[http://www.artima.com/weblogs/view

java - java中的双序列化和长序列化

我可以在HBase中将数字存储为Long和Double。它们在Java中都占用8个字节。使用Double的优点是它可以提供更广泛的整数存储范围。但是,我认为Long的范围也足够我使用了。有没有人知道LongvsDobule的序列化和反序列化性能?我对它们之间的比较很感兴趣。谢谢。 最佳答案 如果要存储整数,请使用Long。您关于“使用Double的优势在于它提供更广泛的整数存储范围”的说法是不正确的。两者都是64位长,但是double必须使用一些位来表示指数,留下更少的位来表示幅度。您可以在double中存储更大的数字,但会失去精度

java - 静态方法是否有利于可扩展性?

静态方法和类是否有利于可伸缩性?我认为静态类/方法提高了应用程序的可伸缩性,而实例方法的伸缩性不大。那么在可能的情况下编写静态方法是一种好的编程习惯吗? 最佳答案 Doesstaticmethodsandclassaregoodforscalability?一个与另一个关系不大。Ithinksostaticclass/methodimprovesscalabilityofapplicationandinstancemethodsdoesn'tscalesmuch.错了。你为什么这么认为?Soisitgoodprogrammingpr

java - 如何将字母数字电话号码转换为数字

更新:我的实用程序的最终版本如下所示:StringBuilderb=newStringBuilder();for(charc:inLetters.toLowerCase().toCharArray()){switch(c){case'0':b.append("0");break;case'1':b.append("1");break;case'2':case'a':case'b':case'c':b.append("2");break;case'3':case'd':case'e':case'f':b.append("3");break;case'4':case'g':case'h':

java - 可以明智地使用哪种 toString() 方法?

我正在从事一个提高性能的项目。我有一个疑问,当我们在一个过程中时,我们倾向于跟踪所使用的DTO和实体的当前状态。因此,为此我们在所有POJO中都包含了toString()方法。我现在已经通过以下三种不同的方式实现了toString():-publicStringtoString(){return"POJO:"+this.class.getName()+"RollNo:"+this.rollNo+"Name:"+this.name;}publicStringtoString(){StringBufferbuff=newStringBuffer("POJO:").append(this.c

java - 我应该迭代一个 Java 集合来获取子集,还是应该先将它转换为数组然后迭代来获取它?

我正在调用一个API,它返回一个对象集合。我想获取对象的子集。我正在考虑两种解决方案。哪一个会给我更好的表现?根据我的理解,toArray()调用主要会遍历集合一次。如果那是真的,那么解决方案会更好吗?解决方案1-publicstaticListget(UUIDrecordid,intstart,intcount){Listnames=newArrayList();...Collectioncolumnnames=result.getColumnNames();intindex=0;for(UUIDcolumnname:columnnames){if((index>=start)&&(