Tag: 性能

Google Collections(Guava Libraries):ImmutableSet / List / Map and Filtering

假设您要构建ImmutableSet / List / Map对象的副本,但过滤掉一些原始条目。 实现这一目标的一种方法如下: ImmutableList.copyOf(Iterables.filter(myObject, myObject.EQUALS)); 其中myObject.EQUALS是Iterables.filter()操作的谓词。 我认为这是一个非常优雅且易于阅读的实现。 但是,一个构建两个列表对象(首先通过Iterables.filter(…)调用,第二个通过ImmutableList.copyOf(…) )这是非常低效的。 有人知道更有效的方法吗? 我想最好的办法是将过滤谓词添加到ImmutableSet / List / Map构建器中,这样对象必须只构造一次。 但不幸的是,没有这样的参数。

MultiMap与MultiValue Map

在一个地方我必须使用映射到单个键的许多值的映射,所以我想知道在密钥,列表和密钥的MultiMap, java中的值的 HashMap之间是否存在任何显着的性能差异。

log4j性能

我正在开发一个网络应用程序,我想记录一些信息,以帮助我改进和观察应用程序。 (我正在使用Tomcat6) 首先,我想我会使用StringBuilders,将日志附加到它们,并且任务会像每2分钟一样将它们保存到数据库中。 因为我担心开箱即用的日志记录系统的性能。 然后我做了一些测试。 特别是log4j。 这是我的代码: Main.java public static void main(String[] args) { Thread[] threads = new Thread[LoggerThread.threadsNumber]; for(int i = 0; i < LoggerThread.threadsNumber; ++i){ threads[i] = new Thread(new LoggerThread("name – " + i)); } LoggerThread.startTimestamp = System.currentTimeMillis(); for(int i = 0; i < LoggerThread.threadsNumber; ++i){ threads[i].start(); } LoggerThread.java public class LoggerThread implements […]

将List的前n个元素放入数组的最快方法

获取存储在数组中的列表的前n个元素的最快方法是什么? 将此视为场景: int n = 10; ArrayList in = new ArrayList(); for(int i = 0; i < (n+10); i++) in.add("foobar"); 选项1: String[] out = new String[n]; for(int i = 0; i< n; i++) out[i]=in.get(i); 选项2: String[] out = (String[]) (in.subList(0, n)).toArray(); 选项3:有更快的方法吗? 也许使用Java8-streams?

在Java中:在哪里创建一个指向更大数组的一部分的子数组的方法?

学习Java,请温柔。 理想情况下,我需要创建一个字节数组,指向更大数组的一部分: byte[] big = new byte[1000]; // C-style code starts load(file,big); byte[100] sub = big + 200; // C-style code ends 我知道这在Java中是不可能的,并且有两种解决方法可以想到并包括: 要么通过大的复制部分大到子迭代。 或者编写自己的类,它将引用big + offset + size并通过使用big作为实际底层数据结构的访问器方法实现“子arrays”。 我试图解决的任务是将文件加载到内存中,然后获取对通过类存储文件的记录的只读访问权限。 速度是最重要的,因此理想情况下我想避免复制或访问方法。 因为我正在学习Java,所以我想坚持下去。 我有其他选择吗? 如果我没有充分解释任务,请提出问题。

将JSON解析为cofigure android应用程序

在我的Android应用程序中,我必须使用服务器中的JSON在应用程序中进行特定调整。 我试图实现的是读取这个json并将所有值存储到局部变量中以在应用程序内执行操作。 JSON来自服务器: [ { “sett”: ” “, “glHdr”: { “sm”: [ ], “scleHPad”: false, “st”: “sbsm” }, “colrBG”: [ 23, 105, 184, 100 ], “colrTB”: [ 0, 0, 0, 0 ], “colrTR”: [ 255, 255, 255, 100 ], “glFtr”: { “icoSz”: “icoSzN”, “sm”: [ ], “scleHPad”: false, “gvNR”: 3, “gvHIT”: false, “gvNC”: 3, “st”: […]

Java是否“缓存”匿名类?

请考虑以下代码: for(int i = 0;i < 200;i++) { ArrayList currentList = new ArrayList() {{ add(i); }}; // do something with currentList } Java如何处理currentList的类? 它是否会认为200个对象中的每一个都是不同的类? 即使在创建第一个对象后,它是否会受到性能影响? 是以某种方式缓存吗? 我只是好奇 :)

如何从XML反序列化Java对象?

我相信这可能已经详细讨论或回答过,但是我需要更多关于我的情况的最佳方法的信息…… 问题: 我们有一些大型XML数据(从100k到5MB不等),我们需要将它们扩展到Java对象中。 问题是数据根本不能很好地映射到对象上,所以我们只需要拉出数据的某些部分并创建对象。 鉴于此,JAXB或XStream等解决方案确实不合适。 因此,我们需要将XML数据拉出并尽可能高效地将其转换为java对象。 可能的解决方案: 我看到它的方式,我们有3种可能的解决方案: SAX解析 DOM解析 XSLT 我们可以将XML加载到任何JAXP实现中,并使用上述方法之一拉出数据。 问题(S) 我有几个问题/疑虑: XSLT如何在幕后工作? 它只是一个DOM解析器吗? 我问,因为XSLT似乎是一个很好的方法,但我真的不想考虑它,如果它不会给我们比DOM更好的性能。 有哪些流行的库提供DOM,XSLT和SAX XML解析器? 根据您的经验,选择DOM,SAX或XSLT的原因是什么? DOM或XSLT的易用性是否完全支配SAX提供的性能改进? 那里有任何基准吗? 我发现的那些是旧的(如8岁)。 因此,最近的一些基准将不胜感激。 除了上面提到的那些我还有什么其他解决方案可能会丢失吗? 编辑: 一些说明……您可以使用XSLT直接将值注入Java对象…它通常用于将XML转换为其他XML,但我是从调用XSLT到java的方法的角度来谈论注入价值。 我还不清楚XSLT处理器是如何正常工作的…它如何将XML提供给你编写的XSLT代码?

logback.xml的perf4j设置

大家好,我想知道在使用perf4j时logback.xml的确切配置设置。 我在logback.xml中创建此配置 firstBlock,secondBlock <!– The NotificationThresholds param configures the sending of JMX notifications when statistic values exceed specified thresholds. This config states that the firstBlock max value should be between 0 and 800ms, and the secondBlock max value should be less than 1500 ms. You can also set thresholds on the Min, Mean, StdDev, Count […]

Java:使用getter vs缓存值

我有一个返回String的getter,我将它与其他String进行比较。 我检查null的返回值,所以我的if语句看起来像这样(如果是真的话我真的会提前退出) if (someObject.getFoo() != null && someObject.getFoo().equals(someOtherString)) { return; } 从表面上看,存储返回的String而不是像这样两次调用getter会更好吗? 它甚至重要吗? String foo = someObject.getFoo(); if (foo != null && foo.equals(someOtherString)) { return; } 要回答评论中的问题,不会经常执行此检查,并且getter非常简单。 我很好奇如何分配一个新的局部变量与另外一次执行getter相比。