草庐IT

PERFORMANCE

全部标签

java - 可选 vs if/else-if 性能 java 8

你好,我有两个代码示例if/elseif/else语句privateObjectgetObj(message){if(message.getA()!=null)returnmessage.getA();elseif(message.getB()!=null)returnmessage.getB();elseif(message.getC()!=null)returnmessage.getC();elsereturnnull;}可选语句privateOptionalwrap(Objecto){returnOptional.ofNullable(o);}privateObjectgetOb

java - 更快的读取文件的方法

我正在开发一个包含大约400个输入文件和大约40个输出文件的程序。很简单:它读取每个输入文件并生成一个新文件,但更大(基于算法)。我正在使用BufferedReader的read()方法:Stringencoding="ISO-8859-1";FileInputStreamfis=newFileInputStream(nextFile);BufferedReaderreader=newBufferedReader(newInputStreamReader(fis,encoding));char[]buffer=newchar[8192];要读取我正在使用的输入文件:privateStr

java - 为什么避免 boolean 实例化是个好主意?

PMD警告我避免boolean实例化(出于效率原因)。我有这样的东西Booleanvariable=newBoolean(somestringIGotRepresentingABoolean);我应该用这个Booleanvariable=Boolean.valueOf(somestringIGotRepresentingABoolean);为什么这样更好? 最佳答案 原因是newBoolean总是返回一个新的实例。由于boolean实例是不可变的,因此拥有超过2个实例是没有意义的。一个为假,一个为真。试试这个,你会看到Boolean

Java:微优化数组操作

我正在尝试制作一个简单的前馈神经网络的Java端口。这显然涉及大量的数值计算,所以我试图尽可能地优化我的中央循环。结果在float数据类型的限制内应该是正确的。我当前的代码如下(删除了错误处理和初始化):/***Simpleimplementationofafeedforwardneuralnetwork.Thenetworksupports*includingabiasneuronwithaconstantoutputof1.0andweightedsynapses*tohiddenandoutputlayers.**@authorMartinWiboe*/publicclassFe

java - Java 中小型不可变对象(immutable对象)的缓存策略?

我正在开发一个应用程序,它可以创建大量不可变的小Java对象。一个例子可能是:publicclassPoint{finalintx;finalinty;finalintz;.....}许多Point实例可能需要引用相同的(x,y,z)位置。在应用程序的生命周期中尝试缓存和重用此类对象在多大程度上有意义?有什么特殊的技巧来处理这种情况? 最佳答案 当它成为一个问题时。否则,您只是在创建无用的抽象层。无论哪种方式,您都可以使用PointFactory轻松实现这一点,调用它来获取Point,对于任何给定的x、y和z。但是你必须管理何时应该

Java 'Prototype' 模式 - new vs clone vs class.newInstance

在我的项目中有一些“原型(prototype)”工厂通过克隆最终私有(private)实例来创建实例。这些工厂的作者说,这种模式提供了比调用"new"运算符更好的性能。使用谷歌获得一些线索,我没有找到任何相关的东西。这是在javdocfromanunknownproject中找到的一小段摘录Sadly,clone()isratherslowerthancallingnew.Howeveritisalotfasterthancallingjava.lang.Class.newInstance(),andsomewhatfasterthanrollingourown"cloner"meth

Java 编码器性能

我使用JAXB编码器以及我自己的编码器将纯Javabean对象编码为XML。据观察,它们都需要几乎相同的时间来编码。性能NotAcceptable,需要改进。我们可以通过哪些可能的方式来提高编码器的性能?喜欢线程? 最佳答案 确保只创建一次JaxB上下文实例,创建上下文需要一些时间,因为它使用反射来解析对象的注释。请注意,JAXBContext是线程安全的,但marshallers\unmarshallers不是,因此您仍然必须为每个线程创建编码器。但是,我发现在您已经拥有jaxb上下文的情况下创建编码器非常快。

java - Java 中的快速 sqrt 以牺牲准确性为代价

我正在为[0,2*10^12]输入范围内的double值寻找Java中的快速平方根实现。对于此范围内的任何值,精度应最多为小数点后5位。换句话说,结果可能与Math.sqrt()方法在小数点后5位不同。但是,此方法需要比Math.sqrt()快得多。有什么想法吗?谢谢! 最佳答案 我不相信(没有基准来证明这是错误的)纯Java实现可以比Math.sqrt()快得多。OracleJREimplementation和OpenJDKimplementation是native实现。 关于java

java - 将 java.lang.Long 转换为原始 int 的最有效方法

我有一个奇怪的场景,我需要将数百万个java.lang.Long转换为原始int类型。我每天都需要这样做几次,每一天。通常,我不会担心这种简单的转换,但由于这种情况发生得如此频繁,我不得不问:执行此操作最有效的方法是什么,为什么?我的第一次尝试:LongmyLong=getLong();intx=Integer.valueOf(myLong.toString())尽管这看起来像是绕着谷仓走了3条路。提前致谢。 最佳答案 Long类有一个.intValue()方法,我想这就是您要找的...(警告,你可能会失去精度等等——但你可能已经知

java - 如何使用两个数字作为映射键

我有两个数字,我想将它们一起用作Map中的键.目前,我正在连接它们的字符串表示形式。例如,假设关键数字是4和12。我使用:Stringkey=4+","+12;map声明为Map.我觉得这太糟糕了!我喜欢使用String以外的东西作为key!我想要以最快的方式创建这些key。谁有好主意? 最佳答案 创建一个包含这两个数字的对象并将其用作键。例如:classCoordinates{privateintx;privateinty;publicCoordinates(intx,inty){...}//getters//equalsandh