Tag: 性能

GSON序列化非常慢

我正在尝试使用GSON序列化7000 POJO的数组,并且序列化时间非常慢。 序列化以下对象的数组大约为3-5秒: public class Case { private Long caseId; private Key orgKey; private Key workflowKey; private Key creatorKey; private Date creationTimestamp; private Date lastUpdatedTimestamp; private String name; private String stage; private String notes; } 使用自定义序列化器/反序列化器序列化关键字段: public class GsonKeySerializerDeserializer implements JsonSerializer<Key>, JsonDeserializer<Key>{ @Override public JsonElement serialize(Key src, Type typeOfSrc, JsonSerializationContext arg2) { return new JsonPrimitive(src.getString()); […]

我应该为一个非常大的数据集使用`HashSet`或`TreeSet`吗?

我需要在数据结构中存储2到1,500万个帐户(长度为15的String ),以便查找和检查唯一性。 最初我计划将它们存储在HashSet ,但是我怀疑由于哈希冲突导致查找的速度会很慢,并且最终会比TreeMap慢(使用二进制搜索)。 不需要对数据进行排序。 我正在使用Java 7.我有64G系统,48G专用于此应用程序。 这个问题不是HashSet和TreeSet性能测试的重复,因为该问题是关于向Set添加元素的性能,这个问题是关于检查现有Set的重复值的性能。

jHiccup分析没有加起来

我有以下jHiccup结果。 显然,图中有几秒钟的巨大峰值。 我的应用程序每100毫秒左右输出一次日志。 当我阅读我的日志时,我从未看到如此巨大的停顿。 此外,我可以从JVM诊断中检查GC中花费的总时间,并说明如下: Time: 2013-03-12 01:09:04 Used: 1,465,483 kbytes Committed: 2,080,128 kbytes Max: 2,080,128 kbytes GC time: 2 minutes on ParNew (4,329 collections) 8.212 seconds on ConcurrentMarkSweep (72 collections) 72个独立系列的总大GC时间约为8秒。 根据我的JVM提示,所有这些都低于200毫秒,以限制暂停。 另一方面,我在我的独立网络日志(wireshark)中确切地观察到了一个5秒的网络响应时间实例。 这意味着暂停存在,但它们不是GC,它们不是阻塞线程或可以在分析器或线程转储中观察到的东西。 我的问题是调试或调整此行为的最佳方法是什么? 另外,我想了解jHiccup如何进行测量。 显然它不是GC暂停时间。

如何降低GC期间的弱ref处理时间?

目前我遇到的问题是我的应用程序偶尔会显示很长的GC时间,但所有这些只是由弱参考处理引起的。 所以线程停止的时间总是接近弱的ref处理时间。 所有其他GC循环均为0.0001秒至0.200秒。 从gc.log(重新格式化): 10388.186: [GC[YG occupancy: 206547 K (306688 K)]10388.186: [Rescan (parallel) , 0.1095860 secs]10388.295: [weak refs processing, 2.0799570 secs] [1 CMS-remark: 2973838K(3853568K)] 3180386K(4160256K), 2.1899230 secs] [Times: user=2.51 sys=0.00, real=2.18 secs] Total time for which application threads were stopped: 2.1906890 seconds 目前我已经有了这些设置。 尝试更简单的设置,但没有变化。 -Xms4g -Xmx4g -XX:NewSize=128m -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:MaxGCPauseMillis=50 -XX:CMSInitiatingOccupancyFraction=50 -XX:ParallelGCThreads=16 -XX:+DisableExplicitGC 如果我打开NewSize,我最终会得到很长的正常GC循环。 该机器有8个内核,并没有为应用程序烧掉那么多的CPU。 […]

在Erlang比单线程Java更快之前需要多少CPU

我目前正在使用Java,我在网上读了很多关于Erlang的内容,我有两大问题: Erlang会比简单的Java慢多少(如果有的话)? 我在这里假设Java将从网络上的枪战基准更快(Erlang不那么好)。 那么,我需要多少CPU才能使Erlang超越单线程Java(在我的特殊情况下,如下所示)? 在阅读了Erlang一段时间后,我发表了大量评论/post,说大多数大型Erlang系统都包含大量的C / C ++。 这是出于速度原因(我的假设)还是别的什么? 即为什么需要这个? 我已经读过大多数机器上升的处理器数量和线程模型很难(我同意)但是我想找出什么时候会越过“线”以便我可以在右边更改语言/范例时间。 一点背景/背景: 我在Java服务的服务器端工作,这些服务非常受CPU限制,很容易并行。 这通常是由于单个传入更新(通过TCP)触发对多个(100个)输出的更改。 计算通常非常简单(几个循环,只需很多算术),输入速度非常快(100 / s)。 目前我们在4台CPU机器上运行并在每台机器上运行多个服务(因此multithreading非常没有意义,Java似乎运行得更快,没有同步块等,使其成为multithreading)。 现在有一个强大的速度推动,我们现在可以访问24台处理器机器(如果需要,每个进程),所以我想知道如何最好地继续 – 大规模multithreadingJava或更容易编码的东西,如Erlang。

谷歌应用引擎1.6.4在本地较慢?

原始问题 因为我从1.6.3改变了版本。 到1.6.4我在托管模式下与GWT一起工作时遇到严重的性能问题。 更新18/04/2012 该问题在开发环境中也可以在1.6.4.1中重现。 到目前为止,最好是降级到1.6.3 更新09/07/2012 据Kris Giesing说:这仍然没有在1.7.0中修复。 要求在1.4.3中处理330ms,在1.6.3中处理415ms,需要13740ms来处理1.7.0。 这是来自Java分析代码(没有I / O)的时间 – 几乎是40倍的减速。 更新09/08/2012 谷歌在谷歌appengine的公开问题清单7282问题中承认了这个问题。

C性能和编译选项

我有两个类似的实现(java和c ++)用于像选择排序这样的简单算法。 public interface SortingAlgorithm { public void sort(int[] a); } public class SelectionSort implements SortingAlgorithm { @Override public void sort(int[] a) { for (int i = 0; i < a.length; i++) { int lowerElementIndex = i; for (int j = i + 1; j < a.length; j++) { if (a[j] < a[lowerElementIndex]) { lowerElementIndex […]

如何使用ANT仅编译已更改的源文件

我正在尝试编写用于编译源文件夹的ant build,这是我编译的脚本目标 。 在我的项目中,我有大约1000个.java文件。 当更改单个.java文件时,目标往往会编译所有.java文件。 这使得开发非常缓慢。 我只想知道有没有任何方法或代码来改变任务的行为,只编译修改或更改.java文件而不是所有.java文件。 请帮帮我。

修改Levenshtein距离算法不计算所有距离

我正在进行模糊搜索实现,作为实现的一部分,我们使用的是Apache的StringUtils.getLevenshteinDistance。 目前,我们正在寻找模糊搜索的特定最大平均响应时间。 经过各种改进和一些剖析后,花费最多时间的地方是计算Levenshtein距离。 它占搜索字符串总时间的大约80-90%三个字母或更多。 现在,我知道在这里可以做些什么有一些限制,但我已经读过以前的SO问题和LD的维基百科链接,如果有人愿意将阈值限制在设定的最大距离,这可能有助于遏制花在算法上的时间,但我不确定如何准确地做到这一点。 如果我们仅对距离感兴趣,如果它小于阈值k,那么在矩阵中计算宽度为2k + 1的对角条纹就足够了。 这样,算法可以在O(kl)时间内运行,其中l是最短字符串的长度。[3] 您将在下面看到StringUtils的原始LH代码。 之后是我的修改。 我试图基本上计算设定长度与i,j对角线的距离(因此,在我的例子中,i,j对角线上方和下方的两个对角线)。 但是,这是不正确的,因为我已经这样做了。 例如,在最高的对角线上,它总是会选择正上方的单元格值,这将是0.如果有人可以告诉我如何使这个function如我所描述的那样,或者如何使它成为如此的一般建议, 这将不胜感激。 public static int getLevenshteinDistance(String s, String t) { if (s == null || t == null) { throw new IllegalArgumentException(“Strings must not be null”); } int n = s.length(); // length of s int m = t.length(); // length of […]

通常的hibernate性能陷阱

我们刚刚完成了我们的应用程序。 (她开始变慢)。 问题似乎是“在hibernate状态”。 这是一个遗留映射。 谁工作,做它的工作。 关系背后的关系也是好的。 但是有些要求很慢。 因此,我们将不胜感激任何关于hibernate常见和常见错误的输入,这些错误最终会导致响应缓慢。 例如:渴望代替懒惰可以大大改变响应时间…. 编辑:像往常一样,阅读手册往往是个好主意。 整章涵盖了这个主题: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html