Tag: 性能

java性能:将hashMap值存储在变量冗余中吗?

我的目标是减少内存使用量。 如果我需要多次使用该值,我应该将hashMap值存储在变量中吗? public void upcCheck() { String prodUPC = pHashMap.get(“productUpc”); if(prodUpc == ”){ //do stuff; } else if(prodUpc == ‘0123456’){ //do other stuff; } } 或者我应该总是使用hashMap的get()方法来避免冗余和不必要的内存使用? public void upcCheck() { if(pHashMap.get(“productUpc”) == ”){ //do stuff; } else if(pHashMap.get(“productUpc”) == ‘0123456’){ //do other stuff; } } hashMap包含很多值ae:产品类型,产品价格等……许多方法都设置为使用这些值。 所以我想知道最好的方法。 谢谢!

ArrayList.trimToSize()方法

我可以在动态arrayList中使用ArrayList.trimToSize()方法吗? 如果我使用它,会发生什么? 在动态ArrayList上使用此方法可以获得任何好处。 在这种情况下,我应该使用这种方法。 提前致谢。

后增量和增量前运算符之间的性能差异?

在Java中,使用post increment与pre increment operator有什么性能影响? 例: i++ ++i

第一次Java循环运行时,为什么?

在对Solaris SPARC盒子上的一些Java代码进行基准测试时,我注意到我第一次调用基准测试函数时,它运行得很慢(10倍差异): 首先| 1 | 25295.979毫秒 第二| 1 | 2256.990毫秒 第三| 1 | 2250.575毫秒 为什么是这样? 我怀疑是JIT编译器,有没有办法validation这个? 编辑:根据一些答案,我想澄清一下,这段代码是最简单的测试案例,我可以找到展示这种行为。 所以我的目标不是让它快速运行,而是要了解发生了什么,所以我可以在我真正的基准测试中避免它。 解决: Tom Hawtin正确地指出我的“慢”时间实际上是合理的。 根据这一观察,我将调试器附加到Java进程。 在第一个中,内循环看起来像这样: 0xf9037218: cmp %l0, 100 0xf903721c: bge,pn %icc,0xf90371f4 ! 0xf90371f4 0xf9037220: nop 0xf9037224: ld [%l3 + 92], %l2 0xf9037228: ld [%l2 + 8], %l6 0xf903722c: add %l6, 1, %l5 0xf9037230: st %l5, [%l2 […]

对象类型转换的性能

Object Typecasting在性能方面有多昂贵? 我应该尽可能避免使用Typecasting吗?

限制java应用程序的内存和CPU使用率

说,“运行myApp.jar,cpu = 800,内存= 1024” 我已经做了多年的java编程,问这个问题是一个尴尬。 我甚至不知道这是否可能。 如果是这样,怎么样? 我只想知道是否可以设置java程序的最大内存和CPU使用率。 我突然想到了这一点,因为我最近开始开发移动应用程序。 我想知道应用程序在具有非常有限的内存和处理器的设备上的行为。 我看到了带有在浏览器上运行的演示应用程序的物理引擎,或者我可以在我的PC上执行。 如果我在移动设备上运行它会怎么样? 性能是否相同? 我不是开发一个示例移动应用程序来测试库的性能,而是首先使用我的PC运行特定的cpu和内存。 顺便说一下,我试着谷歌搜索…我发现只是监控和性能调整。 我可能使用错误的关键字。

Java:比较整数和字符串 – 性能

我有一个String和一个int,让我们说: String str = “12345”; 和int num = 12345; 。 查看它们是否相同的最快方法是什么, str.equals(“” + num)或num == Integer.parseInt(str) (或者有更快的方法吗?)? 这是Integer.parseInt和String.equals的源代码

内存有效的多值映射

嗨,我有以下问题:我在MultiValueMap存储字符串和相应的整数值列表MultiValueMap我存储大约13000亿字符串,一个字符串最多可以有500或更多值。 对于每个值,我将在地图上随机访问。 所以最糟糕的情况是13 000 000 * 500点拨电话。 现在地图的速度很快但内存开销却很高。 MultiValueMap就是HashMap/TreeMap<String, <ArrayList> 。 HashMap和TreeMap都有很多内存开销。 一旦完成,我就不会修改地图,但我需要它在程序中随机访问的速度要快且尽可能小。 (我将它存储在磁盘上并在启动时加载它,序列化的映射文件占用大约600mb但在内存中大约需要3gb?) 最有效的内存是将String存储在已排序的字符串数组中,并为值提供相应的二维int数组。 因此访问将是字符串数组上的二进制搜索并获取相应的值。 现在我有三种方法可以实现目标: 我使用一个排序的MultivalueMap(TreeMap)来创建所有的东西。在我完成获取所有值之后,我通过调用map.keyset().toArray(new String[0]);获取字符串数组map.keyset().toArray(new String[0]); 创建一个二维int数组并从多值映射中获取所有值。 Pro:它易于实现,在创建过程中仍然很快。 Con:从Map到Arrays的复制过程中占用的内存更多。 我从一开始就使用Arrays或者ArrayLists,并将所有内容存储在Pro:最少的内存开销。 Con:这将非常慢,因为每次添加一个新Key时我都必须对Array进行排序/复制。另外,我需要实现自己的(可能更慢)排序,以保持相应的int数组的顺序相同字符串。 难以实施 我使用Arrays和MultivalueMap作为缓冲区。 程序完成创建阶段的10%或20%后,我会将值添加到数组并保持顺序,然后启动一个新的Map。 Pro:足够的速度和足够的内存效率。 骗局:难以实施。 这些解决方案都不适合我。 您是否知道此问题的任何其他解决方案,可能是内存高效(MultiValue)Map实现? 我知道我可以使用数据库,所以不要把它作为答案发布。 我想知道如何在不使用数据库的情况下做到这一点。

java.awt.Robot.createScreenCapture更快的替代方案?

我正在制作一个每秒至少需要截屏24张的程序。 目前使用下面的代码我每隔约94毫秒只得到1,所以每秒约10。 我不想使用任何第三方库,因为我试图尽可能地保持它,但如果我的性能显着提高,我愿意。 我也试图保持这个平台的独立性,但同样,如果它的性能提升非常显着,我愿意将它限制在Windows中。 编辑:我现在也尝试了两种不同的方式; 使用在oracles网站上找到的片段以及下面评论中指出的片段。 所有三个大约在同一时间,2.1-2.2百纳秒,这是非常低效的。 public abstract class Benchmark { private final int iterations; public Benchmark(int iterations) { this.iterations = iterations; } public abstract void logic(); public void start() { long start = System.nanoTime(); for (int iteration = 0; iteration < iterations; iteration++) { long iterationStart = System.nanoTime(); logic(); System.out.println("iteration: " + iteration […]

Java中变量参数方法的性能

我有一个关于Java中具有可变数量参数的方法的性能的问题。 说我有以下两种选择: public static final boolean isIn(int i, int v1, int v2) { return (v1 == i) || (v2 == i); } public static final boolean isIn(int i, int… values) { for (int v : values) { if (i == v) { return true; } } return false; } 现在,当我有第一种方法的版本达到20,30或甚至50个参数时,主要问题出现了。 现在那只会伤到眼睛。 好的,这是遗留代码,我想用唯一的一个变量参数方法替换所有代码。 知道对性能有什么影响吗? 编译器是否有机会对第二种方法进行一些优化,以便它或多或少类似于第一种forms? 编辑:好的,也许我不够清楚。 […]