Tag: 优化

并发程序降级的性能随着线程的增加而增加?

我一直在尝试在四核计算机上实现以下代码,并且Executor服务中100多次迭代中没有线程的平均运行时间如下 1个线程= 78404.95 2个主题= 174995.14 4个线程= 144230.23 但根据我所研究的, 2*(no of cores)线程应该为程序提供最佳结果,这在我的程序中显然不是这样,奇怪地给出了单线程的最佳时间。 代码: import java.util.Collections; import java.util.Random; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class TestHashSet { public static void main(String argv[]){ Set S = Collections.newSetFromMap(new ConcurrentHashMap()); S.add(1); S.add(2); S.add(3); S.add(4); S.add(5); long startTime = System.nanoTime(); ExecutorService executor = Executors.newFixedThreadPool(8); int Nb […]

分支和绑定背包实现的内存扼流圈

我从这里开始编写基于伪Java代码的分支和绑定背包算法的实现。 不幸的是,这个问题的大型实例会让内存窒息。 为什么是这样? 如何使此实现更节省内存? 链接上文件的输入格式如下: numberOfItems maxWeight profitOfItem1 weightOfItem1 . . . profitOfItemN weightOfItemN // http://books.google.com/books?id=DAorddWEgl0C&pg=PA233&source=gbs_toc_r&cad=4#v=onepage&q&f=true import java.util.Comparator; import java.util.LinkedList; import java.util.PriorityQueue; class ItemComparator implements Comparator { public int compare (Object item1, Object item2){ Item i1 = (Item)item1; Item i2 = (Item)item2; if ((i1.valueWeightQuotient)<(i2.valueWeightQuotient)) return 1; if ((i2.valueWeightQuotient)<(i1.valueWeightQuotient)) return -1; else { // costWeightQuotients are […]

用于大输入的Java优化算术和赋值运算符

我有一段代码必须在时钟速度方面运行得非常快。 该算法已经在O(N)中。 它需要2秒,需要1秒。 对于大多数A.length输入~100,000,除非特定行代码被调用极限次数,否则需要.3s。 (对于深奥的编程挑战) 它使用1,2,… N – > 1,3,4,10,15 ..的算术系列的计算,可以用n *(n + 1)/ 2 I循环通过这个等式数百个成千上万次。 我无法访问输入,也无法显示它。 我能够返回的唯一信息是运行所花费的时间。 特别是等式是: s+=(n+c)-((n*(n+1))/2); s和c的值可以是0到10亿 n可以是0到100,000 在时钟速度方面写这个语句最有效的方法是什么? 我听说除法需要更多的时间然后乘法,但除此之外我无法确定在一行或多个赋值行中写这个是否更有效。 除以乘法再乘以然后除以? 还会创建自定义整数类型显着帮助吗? 根据请求编辑,带有小输入案例的完整代码(对不起,如果它很难看,我只是继续剥离它): public static void main(String[] args) { int A[]={3,4,8,5,1,4,6,8,7,2,2,4};//output 44 int K=6; //long start = System.currentTimeMillis();; //for(int i=0;i<100000;i++){ System.out.println(mezmeriz4r(A,K)); //} //long end = System.currentTimeMillis();; // System.out.println((end – start) + […]

在Java中获取k个最小(或最大)数组元素的最快方法是什么?

我有一个元素数组(在这个例子中,这些只是整数),使用一些自定义比较器进行比较。 在这个例子中,我通过定义i SMALLER j模拟这个比较器,当且仅当scores[i] <= scores[j] 。 我有两种方法: 使用当前k候选人的堆 使用当前k候选的数组 我通过以下方式更新上面的两个结构: heap:方法PriorityQueue.poll和PriorityQueue.offer , array:存储候选数组中前k个候选中最差的索引top 。 如果新看到的示例比索引top的元素更好,则后者由前者替换,并且top通过迭代遍历数组的所有k个元素来更新。 但是,当我测试了哪种方法更快时,我发现这是第二种。 问题是: 我对PriorityQueue使用是否不理想? 计算k个最小元素的最快方法是什么? 我感兴趣的是,当例子的数量可以很大,但是邻居的数量相对较小(在10到20之间)。 这是代码: public static void main(String[] args) { long kopica, navadno, sortiranje; int numTries = 10000; int numExamples = 1000; int numNeighbours = 10; navadno = testSimple(numExamples, numNeighbours, numTries); kopica = testHeap(numExamples, numNeighbours, numTries); sortiranje […]

JSF的性能调优

任何人都可以列出调整JSF WebApp @的最佳技巧。

可以优化arrays访问吗?

也许我被我的探测器(Netbeans)误导了,但我看到了一些奇怪的行为,希望也许有人可以帮助我理解它。 我正在开发一个应用程序,它大量使用相当大的哈希表(键是long,值是对象)。 内置java哈希表(特别是HashMap)的性能非常差,在尝试了一些替代方案 – Trove,Fastutils,Colt,Carrot之后 – 我开始自己开发。 使用双哈希策略的代码非常基础。 这工作得很好,并且显示了迄今为止我尝试过的所有其他选项的最佳性能。 根据分析器的说法,查找哈希表是整个应用程序中最昂贵的方法 – 尽管事实上其他方法被调用了很多次,和/或做了更多的逻辑。 让我感到困惑的是查找仅由一个类调用; 调用方法执行查找并处理结果。 两者的调用次数几乎相同,调用查找的方法在处理查找结果时有很多逻辑,但速度提高了约100倍。 下面是哈希查找的代码。 它基本上只是对数组的两次访问(根据分析,计算哈希码的函数几乎是免费的)。 我不明白这段代码怎么会这么慢,因为它只是数组访问,我没有看到任何使它更快的方法。 请注意,代码只返回与密钥匹配的存储区,调用方应该处理存储区。 ‘size’是hash.length / 2,hash1在哈希表的前半部分进行查找,hash2在后半部分进行查找。 key_index是传递给构造函数的哈希表上的最终int字段,Entry对象上的values数组是一个通常长度为10或更短的long数组。 人们对此有任何想法都非常感激。 谢谢。 public final Entry get(final long theKey) { Entry aEntry = hash[hash1(theKey, size)]; if (aEntry != null && aEntry.values[key_index] != theKey) { aEntry = hash[hash2(theKey, size)]; if (aEntry != null && […]

优化BerkeleyDB JE数据库

我计划在BerkeleyDB JE数据库中插入大量唯一键(~3E9)。 键将具有固定长度(~10个字节),但值将具有可变长度。 数据库不是事务性的。 您会为EnvironmentConfig和DatabaseConfig建议哪些参数来优化数据库的大小和速度? 非常感谢, 皮埃尔

这个Java代码如何加速?

我正在尝试对Java执行简单任务的速度进行基准测试:将大文件读入内存,然后对数据执行一些无意义的计算。 所有类型的优化都很重要。 无论是以不同方式重写代码还是使用不同的JVM,都会欺骗JIT。 输入文件是由逗号分隔的5亿个32位整数对列表。 喜欢这个: 44439,5023 33140,22257 … 这个文件在我的机器上需要5.5GB 。 该程序不能使用超过8GB的RAM,只能使用一个线程 。 package speedracer; import java.io.FileInputStream; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; public class Main { public static void main(String[] args) { int[] list = new int[1000000000]; long start1 = System.nanoTime(); parse(list); long end1 = System.nanoTime(); System.out.println(“Parsing took: ” + (end1 – start1) / 1000000000.0); int rs […]

cpu的矩阵访问和乘法优化

我在java中制作了一些内在优化的矩阵包装器(在JNI的帮助下)。 需要对此进行肯定, 您能否给出关于矩阵优化的一些提示? 我要实现的是: Matrix可以表示为四组缓冲区/数组,一组用于水平访问,一组用于垂直访问,一组用于对角访问,命令缓冲区仅在需要时计算矩阵元素。 这是一个例子。 Matrix signature: 0 1 2 3 4 5 6 7 8 9 1 3 3 5 2 9 First(hroizontal) set: horSet[0]={0,1,2,3} horSet[1]={4,5,6,7} horSet[2]={8,9,1,3} horSet[3]={3,5,2,9} Second(vertical) set: verSet[0]={0,4,8,3} verSet[1]={1,5,9,5} verSet[2]={2,6,1,2} verSet[3]={3,7,3,9} Third(optional) a diagonal set: diagS={0,5,1,9} //just in case some calculation needs this Fourth(calcuation list, in a “one calculation one […]

java中的快速正弦和余弦函数

我知道Math.sin()和Math.cos()函数,但我想知道是否有一种方法可以创建(或使用已经存在的)更快的函数,因为我不关心精确定位准确性。 我正在寻求执行基本的sin或cos计算,并使其基本上尽可能快地执行。 简单地迭代西格玛几次比Math.sin()更快?