草庐IT

OPTIMIZATION

全部标签

java - 快速乘法和减法取模素数

我需要优化一些代码,我将整数vector(32位)乘以标量模p(其中p是质数(2^32)-5),然后从另一个vector模p中减去该vector.代码如下所示:publicstaticvoidmultiplyAndSubtract(longfragmentCoefficient,long[]equationToSubtractFrom,long[]equationToSubtract){for(inti=0;i我使用longs是因为Java不支持无符号整数,但是两个vector都是modp所以你可以期望每个数字都是0有什么优化的想法吗?modp操作占用了大部分执行时间,因此优化它的一种

java - Java 会优化不可变对象(immutable对象)吗?

Java字符串是不可变的,用相同的值实例化多个字符串返回相同的对象指针。(对此有一个术语吗?“池化”似乎很合适,但这已经指的是进行缓存以通过减少实例化来节省时间。)Java是否也对其他不可变的(用户定义的)类执行此操作(没有术语)?Java甚至可以检测到一个类是不可变的,或者这是字符串类所独有的东西? 最佳答案 写信。字符串,你要找的词是interning.Java不会为您自己的不可变对象(immutable对象)执行此操作。不过,它确实有盒装原语的缓存版本。请参阅wrapperclasscaching上的这篇文章了解更多信息。

java - Java用+优化了多少字符串连接?

我知道在最近的Java版本中字符串连接Stringtest=one+"two"+three;将得到优化以使用StringBuilder。但是,每次遇到此行时是否会生成一个新的StringBuilder,或者会生成一个单独的ThreadLocalStringBuilder然后用于所有字符串连接?换句话说,我是否可以通过创建自己的线程本地StringBuilder来重用来提高经常调用的方法的性能,或者这样做不会有显着的yield吗?我可以为此编写一个测试,但我想知道它是否可能是特定于编译器/JVM或可以更普遍地回答的问题? 最佳答案 据

添加元素时,java linkedlist 比 arraylist 慢?

我认为在添加元素时链表应该比数组列表更快?我刚刚测试了添加、排序和搜索元素需要多长时间(arraylistvslinkedlistvshashset)。我只是将java.util类用于arraylist和linkedlist...使用每个类可用的两种add(object)方法。arraylist在填充列表...和列表的线性搜索方面优于链表。这样对吗?是不是我在实现过程中做错了什么?***************编辑*****************我只是想确保我正确使用这些东西。这就是我正在做的:publicclassLinkedListTest{privateListNames;pu

java - 计算两点之间地理距离的更快方法

我从互联网上的某个地方借用了以下方法(不记得在哪里)。但它做的是一个直接的过程,找到两个gps点之间的距离。它工作得很好,除了它可能有点慢,因为我在数百万个点上运行它。我想知道是否有人知道一种计算成本更低的方法。准确度需要在“正确”的一般范围内,但不需要100%准确。privatedoubledistFrom(doublelat1,doublelng1,doublelat2,doublelng2){doubleearthRadius=3958.75;doubledLat=Math.toRadians(lat2-lat1);doubledLng=Math.toRadians(lng2-l

java - 在 Java 中遵循 if-else 阶梯的更好选择是什么?

情况:我正在检查文件名,文件名存储在名为str的String变量中,并根据中检查的条件>if语句我正在设置一个名为mailType的变量的值。if(str.contains("template")){if(str.contains("unsupported"))mailType="unsupported";elseif(str.contains("final_result"))mailType="final_result";elseif(str.contains("process_success"))mailType="ProcessSuccess";elseif(str.contai

java - 以给定的精度快速将double转成string

我需要以给定的精度将double转换为字符串。String.format("%.3f",value)(或DecimalFormat)可以完成这项工作,但基准测试表明,即使与不是很快的Double.toString转换相比(它在我的计算机上转换100万个数字大约需要1-3秒),它的速度仍然很慢。有什么更好的方法吗?更新:基准化结果从0到1000000的随机数,结果是以毫秒为单位的操作数(Java1.7.0_45)BenchmarkMeanMeanerrorUnitsString_format747.39413.197ops/msBigDecimal_toPlainString1349.5

Java:微优化数组操作

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

java - JVM 可以在运行时优化一个不变的枚举方法吗?

JVM能否在以下场景下进行运行时优化?我们有以下情况,我们有这个接口(interface):publicinterfaceECSResource{defaultintgetFor(finalEntityentity){returnResourceRetriever.forResource(this).getFor(entity);}}以及具体的实现如:privatestaticenumTestResourcesimplementsECSResource{TR1,TR2;}JVM是否能够(在运行时)确定枚举实例(如TestResources.TR1)属于单个ResourceRetriev

java - HotSpot JIT 中的去反射优化是什么?它是如何实现的?

正在观看TowardsaUniversalVM在演示文稿之前,我研究了这张幻灯片,其中列出了HotSpotJIT所做的所有优化:在language-specifictechniques部分有一个反反射。我试图在Internet上查找有关它的一些信息,但没有成功。我知道这种优化以某种方式消除了反射成本,但我对细节感兴趣。有人可以澄清这一点,或提供一些有用的链接吗? 最佳答案 是的,有一个优化来降低反射成本,尽管它主要是在类库中而不是在JVM中实现的。在Java1.4之前,Method.invoke通过对VM运行时的JNI调用工作。每次