草庐IT

Performance

全部标签

java - 为什么我的Key中的 '1'位越多,放到HashMap中的时间就越长?

我正在为一个类(class)做一个项目,该类(class)专注于在内存中存储一​​个大部分为0值的巨大矩阵,并对其执行一些矩阵数学运算。我的第一个想法是使用HashMap来存储矩阵元素,并且只存储非零元素,以避免使用大量内存。我想为HashMap创建一个键,它代表元素的行号和列号,当我访问映射中的该条目时,我可以重新提取两个值。我对Java和C#都不了解-在C#中我会制作一个包含Row和Column成员的struct,但在Java中我很快意识到没有用户值类型。随着最后期限的临近,我做了一个安全的赌注,将Key设为长。我使用一些非常简单的位移位将行数据(32位整数)存储在前32位中,将列

Java 速度访问数组索引与临时变量

Java中的速度更快。直接多次访问一个数组索引,还是将数组索引的值保存到一个新的变量中用于后面的计算?访问索引if((shape.vertices[0].x>=fromX&&shape.vertices[0].x=fromX)||//rightsideofshapeinscreen(shape.vertices[0].x>=fromX&&shape.vertices[0].x+shape.width临时变量floatx=shape.vertices[0].x;floaty=shape.vertices[0].y;if((x>=fromX&&x=fromX)||//rightsideof

Java:getter 方法与公共(public)实例变量:性能和内存

很抱歉提出新手问题。通过引用与值传递很难!所以我有一个具有相当大数据结构的类——多维数组。我需要从另一个类访问这些数组。我可以只公开数组并执行经典的objectWithStructures.structureOne。或者,我可以做setter/getter:添加一个像publicint[][][]getStructureOne()这样的方法。有一个getter会复制多维数组吗?或者它是否通过引用传递它而你不能改变引用的对象?我担心内存和性能。但是公开数据结构,如果不导致复制则速度更快,这似乎是一种糟糕的编码习惯。附录:那么当我使用getter方法返回对对象(例如数组)的引用时,该对象是

java - 有效地绘制大量粒子

我写了一个粒子系统小程序;目前我正在创建并分别绘制每个粒子。(这里是代码)BufferedImagebackbuffer;Graphics2Dg2d;publicvoidinit(){backbuffer=newBufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);g2d=backbuffer.createGraphics();setSize(WIDTH,HEIGHT);//createstheparticlesfor(inti=0;i它的性能还不错,我可以用20,000个粒子获得大约40FPS(尽管我有一台不错的笔记本电脑)。但

java - ArrayLists 比数组慢 2 倍

我正在测试一种分子动力学算法,其中包括一个由9个double组组成的粒子类,用于存储粒子分量(3D环境中的速度、力和位置)。我使用5个输入大小测试算法:Size(MB)Time(s)0.060.36(fitsincacheL2)0.141.79(fitsincacheL2)0.6036.86(fitsincacheL3)1.35182.24(fitsincacheL3)17.38566.55(itonlyfitsinRAM)然后我将Particles布局从array更改为ArrayList。为了有一个连续的内存块,我创建了arrayList,其大小将占用:ArrayListpx=new

java - 如何为一个巨大的字符串列表计算一个好的哈希码?

一次性根据这些字符串的值计算哈希码的最佳方法是什么?好的,我的意思是它需要:1-快速:我需要获取大量短字符串列表(10^3..10^8项)的哈希码。2-识别整个数据列表如此多的列表可能只有几个不同的字符串必须有不同的哈希码如何用Java实现?也许有一种方法可以使用现有的字符串哈希码,但是如何合并为单独的字符串计算的许多哈希码?谢谢。 最佳答案 为您的字符串创建一个占位符类,然后使用CRC32class.它简单快速:importjava.util.zip.CRC32;publicclassHugeStringCollection{pr

java - 长时间 GC 在应用程序中暂停

我目前运行的应用程序需要最大堆大小为16GB。目前我使用以下标志来处理垃圾回收。-XX\:+UseParNewGC,-XX\:+UseConcMarkSweepGC,-XX:CMSInitiatingOccupancyFraction=50,-XX\:+DisableExplicitGC,-XX\:+PrintGCDateStamps,-XX\:+PrintGCDetails,-Xloggc\:/home/user/logs/gc.log但是,我注意到在某些垃圾回收过程中,应用程序会锁定几秒钟然后继续运行-这是完全不能接受的,因为它是游戏服务器。可以从我的垃圾收集日志中找到一份文件he

java - 是什么让这个 Clojure 函数变慢了?

我正在研究ProjectEulerproblem14在Clojure中。我觉得这是一个很好的通用算法,我得到了正确的结果,但我很难理解为什么我的函数与(我认为是)Java中的等效函数相比如此慢。这是我的Clojure函数,用于从给定的起始数字获取Collat​​z链的长度:(defncollatz-length[n](loop[xnacc1](if(=1x)acc(recur(if(even?x)(/x2)(inc(*3x)))(incacc)))))这是我的Java函数来做同样的事情:publicstaticintcollatzLength(longx){intcount=0;whi

Java8 Lambda 性能与公共(public)函数

我一直在使用Java8VS对lambda性能进行一些演示测试。Java8公共(public)函数。案例如下:我有一个10人的名单(5男5女)。我想知道哪个女人的年龄在18到25岁之间现在,当我执行这些步骤一百万次时,结果将是:LambdawithForEachtook:395ms(396msusingJUnit)Publicfunctionstook:173ms(169msusingJUnit)LambdawithCollecttook:334ms(335msusingJUnit)现在我没想到lambda的执行时间比常规函数长两倍到六倍。所以,现在我很想知道我是否在这里遗漏了什么。可以

java - Java中的大量对象(使用HashMap)

你好,我目前正在使用Java进行单词预测。为此,我使用了基于NGram的模型,但我遇到了一些内存问题...我第一次有这样的模型:publicclassNGramimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privatetransientintcount;privateintid;privateNGramnext;publicNGram(intidP){this.id=idP;}}但它占用大量内存,所以我认为我需要优化,我想,如果我有“hellotheworld”和“hellothepeople”,而不