草庐IT

PERFORMANCE

全部标签

java - 找出两个排序列表是否包含相同元素 Java 的有效方法。

我有一个搜索互素数的紧密循环。列表primeFactors。它的第n个元素包含n的质数分解的排序列表。我正在使用checkIfPrimes检查c和d是否互素booleancheckIfPrimes(intc,intd,List>primeFactors){Listcommon=newArrayList(primeFactors.get(d));//slowcommon.retainAll(primeFactors.get(c));return(common.isEmpty());}primeFactors.get(d).retainAll(primeFactors.get(c))看起来

java - 读取/存储大量多维数据的最快方法? ( java )

我有三个关于三个嵌套循环的问题:for(intx=0;x我需要存储所有计算值。我的标准方法是使用3D数组:values[x][y][z]=1;//testvalue但事实证明这很慢:完成这个循环需要192毫秒,其中单个int赋值intvalue=1;//testvalue仅需66毫秒。1)为什么数组这么慢?2)当我把它放在内部循环中时,为什么它会变得更慢:values[z][y][x]=1;//(noticexandzswitched)这需要超过4秒!3)最重要的是:我能否使用一种与分配单个整数一样快的数据结构,但可以存储与3D数组一样多的数据? 最佳答案

java - 并发 HashMap : what's the point in locking updates only?

我一直认为ConcurrentHashMap和类似的类(保持同步更新但不同步读取)做了一件非常有用且直观的事情:它们不锁定读取并锁定所有更新功能。像这样的策略确实可以使所有事情保持一致。但我仔细阅读了文档,并打开了ConcurrentHashMap的实现,据我所知,它不会在另一个线程执行更新时阻塞读取。如果一个线程开始执行putAll(hugeCollection)并且另一个线程同时重复contains(theSameObjectForAllCalls)那么第二个线程更有可能得到不同的结果,而putAll仍在工作。这是文档中的相关部分:Foraggregateoperationssuc

java - 在许多情况下优化 Java switch 语句?

我目前正在使用switch语句来处理传入消息的类型,其中有20种左右的不同情况。其中一些情况比其他情况发生的可能性高出几个数量级。热点编译器是否能够优化检查案例的顺序以找到要执行的正确案例,或者我应该构建我的代码以便最常见的案例首先出现:switch(messageType){caseMOST_COMMON://handleitbreak;...caseLEAST_COMMON://handleitbreak;}所有情况都是互斥的。使用策略模式和消息类型的Map查找会更好吗?性能是关键问题,因为我每秒处理数千条消息,并试图减少对象创建和方法调用的开销。非常感谢,克里斯编辑:谢谢指点。m

java - Guava Sets.intersection 性能不佳

我今天在生产中遇到了一个奇怪的问题。虽然我喜欢Guava,但我遇到了一个用例,其中Guava的Sets.intersection()表现非常糟糕。我写了一个示例代码:Setcache=newHashSet();for(longi=0;ikeys=newHashSet();for(longi=0;ifoundKeys=newHashSet();for(Longkey:keys){if(cache.contains(key)){foundKeys.add(key);}}System.out.println("Javasearch:"+(System.currentTimeMillis()-

java - kafka如何平衡分区负载?

我遇到了一个关于kafka负载均衡的问题。因此,我创建了一个包含10个分区的主题并创建了2个消费者。10个分区被划分并分配给这些消费者(5个分区分配给第一个,5个分区分配给第二个)并且工作正常。有时第一个消费者工作,有时第二个。但有时我们可能会遇到这样的情况,例如第二个消费者收到一条消息,并且需要时间(例如10分钟)来处理这条消息。那么,我的问题是kafka将如何决定将消息存储到哪个分区?在这种情况下,我认为循环法不是一个好主意,因为由第二个消费者处理的分区中的消息将不会被处理,直到第二个消费者完成长时间的工作。已更新!根据@MilanBaran的回答,生产者端的负载是平衡的。但在这种

java - 在同一个 JVM 中运行多个 Spark 任务有什么好处?

不同的来源(例如1和2)声称Spark可以受益于在同一个JVM中运行多个任务。但他们没有解释原因。这些好处是什么? 最佳答案 如前所述,广播变量是一回事。另一个是并发问题。看一下这段代码:varcounter=0varrdd=sc.parallelize(data)rdd.foreach(x=>counter+=x)println(counter)结果可能会有所不同,具体取决于是在本地执行还是在部署在集群(具有不同JVM)上的Spark上执行。在后一种情况下,parallelize方法在执行器之间拆分计算。计算闭包(每个节点执行其任

Java NIO Servlet 到文件

有没有一种方法(无需缓冲整个输入流)从JavaServlet获取HttpServletRequest并使用所有NIO将其写入文件?值得一试吗?从普通的java.io流读取和写入java.niochannel会更快,还是它们都真的需要纯NIO才能看到好处?谢谢。编辑:所以我只是做了一个快速而肮脏的基准测试,从一个磁盘读取一个文件并写入另一个磁盘(所以我实际上是在测试代码而不是磁盘)。Averages:InputStream->OutputStream:321ms.FileChannel->FileChannel:3ms.InputStream->FileChannel:600ms.我实际

java - 兰特流的高性能缓冲

我的代码会消耗大量(目前为数百万,最终为数十亿)相对较短(5-100个元素)的随机数数组,并对它们进行一些不太费力的数学运算。随机数是随机的,理想情况下我想在多核上生成它们,因为随机数生成占我运行时间的50%以上。但是,我很难以不比单线程方法慢的方式分配大量小任务。我的代码目前看起来像这样:for(inti=0;i我采取的没有奏效的方法是:1+个线程填充ArrayBlockingQueue,我的主循环使用并填充数组(这里的装箱/拆箱是killer级操作)在执行数学的非依赖部分时使用Callable生成vector(产生future)(看起来间接的开销超过了我获得的任何并行性yield)

Java 垃圾回收和原子事件/停止 gc 暂停中断一系列函数调用

我有一个复杂的大型多线程应用程序,我正在为其引入新功能。我添加了对一个专业硬件的调用(通过供应商提供的JNI库)。然而,在此(非常快的)函数被调用之前,一些工作是预先完成的,以填充发送给它的数据结构。然而,应用程序的GC配置文件非常不稳定/糟糕,并且这些填充步骤中的一些似乎被GC中断了。这很重要,因为在这些事件中的第一个事件和移交给硬件资源之间的时间需要保持恒定或尽可能恒定。有没有办法说“为GC同步”,这些操作不会在stoptheworldGC暂停期间被阻止?在RHL5.5上使用64位1.7JDK谢谢 最佳答案 如果实际上是在完整垃