Tag: 性能

使用Stanford CoreNLP进行懒惰解析,以获得特定句子的情感

我正在寻找优化斯坦福CoreNLP情绪管道性能的方法。 因此,想要得到句子的情感,但只有那些包含特定关键词作为输入的句子。 我尝试了两种方法: 方法1:StanfordCoreNLP管道用情绪注释整个文本 我已经定义了一个注释器管道:tokenize,ssplit,parse,sentiment。 我在整篇文章中运行它,然后在每个句子中查找关键字,如果它们存在,则运行返回关键字值的方法。 虽然处理需要几秒钟,但我并不满意。 这是代码: List keywords = …; String text = …; Map sentenceSentiment = new HashMap(); Properties props = new Properties(); props.setProperty(“annotators”, “tokenize, ssplit, parse, sentiment”); props.setProperty(“parse.maxlen”, “20”); props.setProperty(“tokenize.options”, “untokenizable=noneDelete”); StanfordCoreNLP pipeline = new StanfordCoreNLP(props); Annotation annotation = pipeline.process(text); // takes 2 seconds!!!! List sentences = annotation.get(CoreAnnotations.SentencesAnnotation.class); for (int i=0; […]

Java Robot鼠标移动:设置速度?

Java Robot类允许移动鼠标,就像移动实际的物理鼠标一样。 但是,如何以人性化(因而不是即时)的方式将鼠标从Point1移动到Point2? 阿卡,如何设定运动速度? 如果Robot类没有这样的速度,那么如果只能实时移动鼠标,那么应该使用什么样的“算法”来模仿人类的鼠标移动? 它应该以一定的递增速度逐像素移动鼠标吗?

Java:输入/使用“try-catch”块的开销?

这个问题说明了一切。 虽然命中率不是很高(我测量它的速度在1.5x到2x之间),但是try-catch的字节代码与没有try-catch的字节代码之间没有区别。 那么是什么让它通常变慢? PL。 请注意,问题不在于抛出exception的开销,而在于进入/离开try块。 编辑:这是代码(在Hotspot 1.6.0_31服务器上运行) static void tryCatch() { int i = 0; long l1 = getTime(); for(int j = 0; j < 100000; j++) { try { i++; } catch(Exception e) { } } long l2 = getTime(); System.out.println("with try-catch: " + (l2 – l1) + ": " + i); } static […]

为什么我会遇到长时间非GC相关的应用程序暂停?

我一直在GC日志中看到非常长的应用程序暂停,这看起来与垃圾收集无关。 该应用程序在16GB堆上,分配的内存吞吐量非常大。 据我所知,GC日志将显示与GC不一定相关的暂停,这似乎就是这种情况。 此外,在这些暂停期间,CPU达到100%,没有磁盘或内存I / O,并且没有日志记录活动(由于所有应用程序线程都被停止)。 关于可能导致这些长时间停顿的任何想法,或者有关如何跟踪根本原因的任何建议? 以下是日志中的相关片段(请注意151秒暂停): 2015-04-21T06:30:04.834-0500: 217179.483: [GC (Allocation Failure)2015-04-21T06:30:04.849-0500: 217179.483: [ParNew Desired survivor size 43614208 bytes, new threshold 6 (max 6) – age 1: 19876896 bytes, 19876896 total – age 2: 15903904 bytes, 35780800 total – age 3: 617120 bytes, 36397920 total – age 4: 34096 bytes, 36432016 total – age […]

mongodb表现不佳

我目前正在使用mongodb,我看到查询的性能非常差(可能需要几秒钟)。 方案如下: 我有一个结构文件: {_id:”xxx”, userId:”yyy”, a:1 ,b:2, counter:1} 在测试中: “userId” value could be {1..200,000} “a” values could be {1..30} “b” values could be {1} 因此,我的最大大小集合将为6,000,000。目前,为此集合定义了两个索引: default _id and useId 业务逻辑查询所有用户条目,然后通过递增计数器来更新一个特定用户条目(查询更新由“_id”写入)。 此外,如果这是一个新实体,则有一个插入查询。 我在ubuntu上使用mongo 1.8.2和8g ram运行 我有一个主辅助复制(所有mongo运行本地磁盘存储和一个子网与tomcat服务器)。 当然所有的读取都是二级的,并写入master。 我没有测试分片,因为我认为6,000,000不是一个巨大的collections,不是吗? 另外,我运行jmetter测试,一次使用不同的userIds生成500个线程请求。 当我运行mongostat时,我看到%锁定非常高(大约70%),大约5-10分钟的加载后我看到qw(写入队列)是500(作为我打开的连接的数量)当我停止服务器需要mongo大约10-20分钟来完成所有排队的任务 我也运行了db.serverStatus()并解释,结果看起来很好。 当我运行db.currentOp()时,我看到等待’write’锁定的查询我无法将currentOp的输出文件完全分析,因为我从命令行执行查询并且只有窗口缓冲区尺寸。 但是从那里我看到了许多等待写锁的更新(通过_id)。 我会感激任何想法。 还有一件事:因为每个查询可能会带来30个文档,我认为可能会有不同的moddeling如下: {_id:”xxx”, userId:”123″, bs: [{b:1, cs[{c:1, cnt:1}, {c:2, cnt:1}}, {{b:2 cs: [{c:1, […]

Java堆越慢越慢

我有一个在(大)图上运行的Java程序。 因此,它使用了大量的堆空间(~50GB,约占主机上物理内存的25%)。 有一次,程序(重复)从图中选择一个节点并用它进行一些计算。 对于某些节点,此计算需要比预期更长的时间(30-60分钟,而不是预期的几秒钟)。 为了分析这些操作以找出需要花费大量时间的内容,我创建了一个测试程序,它只创建大图的一小部分,然后在其中一个节点上运行相同的操作原计划。 因此,与原始程序相比,测试程序显然只使用非常少的堆空间。 事实certificate,在原始程序中花费48分钟的操作可以在测试程序中在9秒内完成。 这真让我困惑。 第一个想法可能是较大的程序花了很多时间在垃圾收集上。 所以我打开了VM垃圾收集器的详细模式。 据此,在48分钟内没有完整的垃圾收集,年轻一代只有大约20个收集,每个收集不到1秒。 所以我的问题是还有什么可以解释时间的巨大差异? 我不太了解Java如何在内部组织堆。 对于具有大量活动对象的大型堆,是否需要更长的时间? 可能是在这样的设置中对象分配需要更长的时间,因为在堆中找到足够的位置需要更长的时间吗? 或者VM是否会对堆进行任何内部重组,这可能需要花费很多时间(显然除了垃圾收集之外)。 我正在使用Oracle JDK 1.7,如果这非常重要的话。

使用HQL进行Hibernate分页

Hibernate分页问题 我有一个与Hibernate分页有关的问题,在某种程度上已经解释了这个问题 Mysql分页优化 使用Hibernate的ScrollableResults慢慢读取9000万条记录 Hibernate – HQL分页 分页和排序的问题 Hibernate Row Pagination 细节 来自应用程序的HQL查询: Query q = session.createQuery(“from RequestDao r order by r.id desc”); q.setFirstResult(0); q.setMaxResults(50); 查询返回300万条记录,对于分页,我们只设置了50条记录,分页页面非常慢,因为在每次刷新时我们都会调用查询来获取300万条记录,而我们只设置50条记录。 我的主要问题是 HQL是否总是进入并命中数据库,或者它是否会进入会话或内存以查找数据,如果它每次都进入数据库并获得结果集那么从性能的角度来看它是非常合适的,什么是最好的解决方案来改进它? 在hibernate中使用HQL有一种方法可以查询数据库,首先只获取50条记录,然后根据用户的要求获取其他记录。 这个挑战真的让应用程序陷入困境,那么解决这个问题的最佳方法是什么呢? 在日志中生成的HQL查询 from com.delta.dao.RequestDao r order by r.id desc Hibernate生成的查询 select getrequest0_.ID as ID24_, getrequest0_.TIME as START3_24_, getrequest0_.STAT as STATUS24_, getrequest0_.SUM as SUMMARY24_, getrequest0_.OUTNAME as OUTPUT7_24_, […]

Java编写互斥锁的最快方法?

互斥体在许多编程语言中很常见,例如C / C ++。 我在Java中想念他们。 但是,我可以通过多种方式编写自己的class Mutex : 在Mutex上使用简单的synchronized关键字。 使用二进制信号量 。 使用primefaces变量,如此处所讨论的。 …? 什么是最快(最好的运行时)方式? 我认为同步是最常见的,但性能呢?

Java:摆脱`Cipher.init()`开销

我需要提高以下方法的性能: private byte[] decrypt(final byte[] encrypted, final Key key) throws … { this.cipher.init(Cipher.DECRYPT_MODE, key); return this.cipher.doFinal(encrypted); } cipher对象(“AES / ECB / NoPadding”)在构造函数中初始化,因此可以重用它。 使用ECB,因为encrypted数组将始终只包含16个字节的数据(即1个数据块)。 使用128位密钥。 这种方法被称为数百万次,以解密16字节的块,每次使用不同的密钥。 例如,这个方法被调用如下: final List keys = List with millions of keys final byte[] data = new byte[] { … 16 bytes of data go here …} for (final Key key : […]

为什么这个Clojure程序这么慢? 如何让它快速运行?

这里清楚地解释了如何优化处理原始值的Clojure程序:使用类型注释和未经检查的数学,它将快速运行: (set! *unchecked-math* true) (defn add-up ^long [^long n] (loop [nni 0 sum 0] (if (< ni) sum (recur n (inc i) (+ i sum))))) 所以,出于好奇,我已经在lein repl尝试过了,令我惊讶的是,发现这段代码运行速度比预期的慢20倍(Oracle JDK 1.8.0_11 x64上的Clojure 1.6.0): user=> (time (add-up 1e8)) “Elapsed time: 2719.188432 msecs” 5000000050000000 Scala 2.10.4(相同的JVM)中的等效代码在~90ms内运行: def addup(n: Long) = { @annotation.tailrec def sum(s: Long, i: Long): Long = […]