草庐IT

PERFORMANCE

全部标签

java - 性能:循环遍历 ArrayList 数百次与将 Arraylist 转换为 HashMap 并返回?

我有两个大型(1000多个对象)ArrayList,需要比较和操作。我基本上需要从ArrayListA中获取一个值,在ArrayListB中寻找一个匹配的对象,然后操作B中的对象。我需要在A的所有对象中执行此操作。我需要在应用程序中经常执行此操作。订单未知,尺寸会有所不同。(pseudocode)ArrayListAArrayListB我可以遍历B中的每个项目,为A中的每个实体寻找与A中的实体匹配的项目。这看起来效率很低。(pseudocode)for(eachobjectinA){loopthroughallofBandfindit}是否值得将B转换为HashMap(使用我正在比较的

Java - 何时使用迭代器?

我试图更好地理解什么时候应该和不应该使用迭代器。对我来说,每当我有大量数据需要迭代时,我都会为它编写一个迭代器。如果它也适用于Iterator接口(interface),那么它似乎是一个胜利。我读到一点,使用迭代器会产生很多开销。我使用迭代器的一个很好的例子是迭代一堆SQL脚本以一次执行一个查询,读入它,然后执行它。还有其他我应该注意的性能权衡吗?在使用迭代器之前,我会读取整个SQL命令字符串以执行到ArrayList中,然后遍历它。如果导入相当大(例如地理位置数据,则服务器往往会陷入困境)。沃尔特 最佳答案 我认为您的问题是什么时

java - 为什么 JNI 调用本地方法比 sun.misc.Unsafe 中的类似方法慢?

我正在开发一个类似于sun.misc.Unsafe但具有扩展内存管理的JNI实现。为什么来自sun.misc.Unsafe和我开发的库的本地方法的调用时间截然不同?一些数字:sun.misc.Unsafe.getInt(address)需要~1ns当我的类似方法需要~10ns两种实现方式大体相同,都沿用了OpenJDK的源码,只是通过指针返回变量。两者的注册方式相同。如何加速JNI调用?是什么让不安全性能如此特别?谢谢,尤里/ 最佳答案 如果您在Unsafe类中寻找native方法的来源,您会发现它不使用JNI实现。相反,不安全的方

Java 正则表达式提供任何性能优势?

在Java中,当我们尝试使用正则表达式进行模式匹配时。例如获取输入字符串并使用正则表达式来确定它是否为数字。如果不是,则抛出异常。在这种情况下,据我所知,使用正则表达式可以使代码比我们获取字符串的每个字符、检查它是否为数字以及如果不是则抛出异常更简洁。但我假设正则表达式也能使流程更有效率。这是真的?关于这一点,我找不到任何证据。正则表达式如何在幕后进行匹配?它不也遍历字符串并逐个检查每个字符吗? 最佳答案 为了好玩,我运行了这个微型基准测试。最后一次运行(即JVM预热/JIT后)的结果如下(无论如何,从一次运行到另一次运行结果相当一

java - 玩!框架与 Ruby on Rails

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。这不会是一般比较的请求:玩吧!框架是基于Java的,这意味着代码被解释为字节码,然后在运行时由JVM编译。另一方面,Ruby是一种动态语言,这意味着代码会根据每个请求进行解释。这对每个程序员来说都是显而易见的。另一个方面是开发过程和语言的易用性(强类型与弱类型)。目前我正在使用Play开发一个新网站!所以,对于问题:HTTP服务器的性能(Play!在JV

Java字节码 "excessive"的dup数算不算 "poor"码?

这是一个由两部分组成的问题,但对于单独的部分来说没有意义。字节码输出中的大量dup指令是否表示代码编写不当?其中large由所有字节码指令的一定百分比定义。此外,如何重写生成dup指令的代码? 最佳答案 我们是在谈论您正在分析的javac输出还是您自己的编译器/生成器?如果您从javac生成的内容的角度担心Java代码的质量-忘掉它吧。首先,javac生成次优字节码并依赖JVM/JIT进行所有优化(非常好的选择)。但是字节码仍然可能比任何人可以快速想出的东西都要好得多。这类似于询问C编译器生成的汇编代码的质量。如果您自己生成字节码,

java - 这个 JMH 基准在机器之间不一致 - 为什么?

我正在尝试编写这样的方法:staticbooleanfitsInDouble(longx){//returntrueifxcanberepresented//asanumerically-equivalentdouble}我正在努力寻找最有效的实现方式。我选择了一个,但后来一位同事运行了基准测试并得到了不同的相对结果。对我来说最快的实现对他来说并不是最快的。这些基准有什么问题吗?packagernd;importorg.openjdk.jmh.annotations.Benchmark;importorg.openjdk.jmh.annotations.BenchmarkMode;im

java - 流过滤器的时间复杂度

我有这样的代码:ListListings=newArrayList();Listings.add(listing1);Listings.add(listing2);.........Listinglisting=listings.stream().filter(l->l.getVin()==456).findFirst();我的问题是过滤过程的时间复杂度是多少?如果是O(n),我的直觉是把它转换成类似HashSet的数据结构,这样时间复杂度就可以变成O(1),有没有一种优雅的方式用流来做到这一点? 最佳答案 它是O(n)。流过滤在内

java - 在 Java(1.5 或更高版本)中,从 Set 中获取(任何)元素的最佳执行方式是什么?

在下面的代码中,我需要从toSearch获取一个元素,任何元素。我无法在Set接口(interface)定义上找到一个有用的方法来返回集合中的一个(随机的,但不需要是随机的)成员。因此,我使用了toArray()[0]技术(出现在下面的代码中)。privateSetfloodFill(Valuevalue,CoordinatecoordinateStart){Setresult=newLinkedHashSet();SettoSearch=newLinkedHashSet();toSearch.add(coordinateStart);while(toSearch.size()>0){

java - 维护拥有大量线程的 Java 应用程序时,我需要了解什么?

背景信息我有一个进行数据分析的分布式处理应用程序。它旨在对实时更新的多组数据进行并行处理。作为设计的一部分,分析已分解为分析节点。每个节点获取源数据并对其进行处理以创建其他数据,然后这些数据又可以被其他节点使用。要对一个数据集进行我们当前的全套分析,需要大约200个节点。在目前的设计中,每个节点都有自己的线程运行。现在,大部分时间这些线程都处于hibernate状态。每当数据更新时,它们都会像瀑布一样轮流醒来,然后又回到sleep状态。该应用程序目前正在生产中运行40组数据,每组需要200个节点,使用8000个线程。当没有数据进来时,服务器上就没有负载。当数据在最繁忙的时候进入时,服务