Tag: 性能

似乎在等待的线程的高CPU利用率

我目前正在运行一些JMeter测试来测试Web服务的性能。 它使用了非常多的CPU。 对于一个JMeter请求线程,它使用10-30%的任何位置(取决于请求的类型)。 当我将其提升到仅仅15个线程时,我获得了~95%的CPU利用率。 当然,我想知道发生了什么。 我做了一个Hprof CPU示例(我尝试了时间选项但是花了一个半小时才启动我的服务而没有消息会通过)。 以下是该抽样结果的片段(跨度超过15分钟)。 CPU样本开始(总计= 220846)2014年8月22日星期五13:38:54排名自我累积计数跟踪方法1 14.96%14.96%33038 300514 java.net.PlainSocketImpl.socketAccept 2 14.84%29.80%32776 301258 sun.nio.ch. EPollArrayWrapper.epollWait 3 12.45%42.26%27505 313002 sun.nio.ch.EPollArrayWrapper.epollWait 4 7.48%49.73%16517 300604 java.net.PlainSocketImpl.socketAccept 5 7.18%56.91%15856 303203 sun.nio.ch.EPollArrayWrapper.epollWait 6 6.18%63.09%13639 313001 sun.nio.ch.ServerSocketChannelImpl.accept0 7 6.04%69.13%13329 304259 sun.nio.ch.EPoll.epollWait 8 5.11%74.23%11275 307102 sun.nio.ch.EPollArrayWrapper.epollWait 以及那些顶级样本的相应堆栈: TRACE 300514: java.net.PlainSocketImpl.socketAccept(:未知行) java.net.AbstractPlainSocketImpl.accept(:未知行) java.net.ServerSocket.implAccept(:未知行) java.net.ServerSocket.accept(:未知行) sun.rmi.transport.tcp.TCPTransport $ AcceptLoop.executeAcceptLoop(:未知行) sun.rmi.transport.tcp.TCPTransport $ AcceptLoop.run(:未知行) […]

循环条件中方法调用的效率

我正在编写一个游戏引擎,其中使用for循环迭代在ArrayList中保存的一组对象。 显然,效率是相当重要的,所以我想知道循环的效率。 for (String extension : assetLoader.getSupportedExtensions()) { // do stuff with the extension here } 其中getSupportedExtension()返回String的ArrayList 。 我想知道的是,每次循环遍历新扩展时是否调用该方法。 如果是这样,做以下事情会更有效率: ArrayList supportedExtensions = ((IAssetLoader) loader).getSupportedExtensions(); for (String extension : supportedExtensions) { // stuff } ? 提前致谢。

如何为iBatis select语句设置fetchSize

我在Java中使用iBatis作为ORM框架。 我有一个选择声明 SELECT * FROM SOME_TABLE 我正在使用queryForList方法: List list = getSqlMapClientTemplate().queryForList(“getList”); 但是它检索了大量数据,并且此查询的性能非常慢。 我对这个问题的假设是iBatis具有默认的提取大小(例如在JDBS中是10),所以这就是它如此慢的原因。 所以我想设置更大的提取大小(例如1000)。 我怎么能这样做? 还是我看错了? 注意:我需要所有数据,因此在queryForList方法中设置最大结果对我来说不是一个合适的解决方案。 List queryForList(String id, Object parameterObject, int skip, int max)

@BatchSize但在@ManyToOne案例中有很多往返

我使用hibernate spring-data-jpa和querydsl进行分页,并使用@BatchSize(size=10)进行数据库的往返。 @Entity @Table(name = “appel_offre”, catalog = “ao”) public class AppelOffre implements java.io.Serializable { …. @OneToMany(fetch = FetchType.LAZY, mappedBy = “appelOffre”) @BatchSize(size=10) public Set getAoActivites() { return this.aoActivites; } 并且: @Entity @Table(name = “ao_activite”, catalog = “ao”) public class AoActivite implements java.io.Serializable { ….. @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “ID_ACTIVITE”, nullable = false) @BatchSize(size=10) […]

lambda表现的差异?

这不是我的问题的重复。 我检查了它,它更多的是关于内部匿名类。 我对Lambda表达式很好奇并测试了以下内容: 给定一万个条目的数组,删除某些索引的速度会更快:Lamba表达式还是带有if测试的For-Loop? 第一个结果并不令人惊讶,因为我不知道我会想出什么: final int NUMBER_OF_LIST_INDEXES = 10_000; List myList = new ArrayList(); String[] myWords = “Testing Lamba expressions with this String array”.split(” “); for (int i = 0 ; i x.contains(“s”)); // 16 milliseconds for the traditional Loop for (int i = NUMBER_OF_LIST_INDEXES – 1 ; i >= 0 ; i–){ if […]

while(true)ServerSocket Listen的效率

我想知道一个典型的while(true) ServerSocket监听循环是否需要整个核心等待并接受客户端连接(即使实现runnable并使用Thread .start() ) 我正在实现一种分布式计算集群,每台计算机都需要它用于计算的每个核心。 主节点需要与这些计算机通信(调用修改算法function的静态方法)。 我需要使用套接字的原因是由于跨平台/跨语言function。 在某些情况下,PHP将调用这些java静态方法。 我使用了一个java profiler(YourKit),我可以看到我正在运行的ServerSocket监听线程,它永远不会睡觉而且它总是在运行。 有没有更好的方法来做我想要的? 或者,性能影响是否可以忽略不计? 如果你能想到一个更好的方法,请随时提供任何建议(我已尝试过RMI,但不支持跨语言。 感谢大家

Java CharAt()和deleteCharAt()性能

我一直想知道java中String / StringBuilder / StringBuffer的charAt函数的实现是什么的复杂性? 那么StringBuffer / StringBuilder中的deleteCharAt()呢?

ArrayLists的速度是数组的两倍多吗?

我写了一个试图测试两件事的测试: 即使您不使用整个缓冲区,缓冲区数组的大小是否会影响其性能 数组和ArrayList的相对性能 我对结果感到惊讶 盒装数组(即Integer vs int )并不比原始版本慢得多 底层数组的大小并不重要 ArrayList的速度是相应数组的两倍多。 问题 为什么ArrayList这么慢? 我的基准写得好吗? 换句话说,我的结果是否准确? 结果 0% Scenario{vm=java, trial=0, benchmark=SmallArray} 34.57 ns; ?=0.79 ns @ 10 trials 17% Scenario{vm=java, trial=0, benchmark=SmallBoxed} 40.40 ns; ?=0.21 ns @ 3 trials 33% Scenario{vm=java, trial=0, benchmark=SmallList} 105.78 ns; ?=0.09 ns @ 3 trials 50% Scenario{vm=java, trial=0, benchmark=BigArray} 34.53 ns; ?=0.05 […]

java short,integer,long performance

我读到JVM存储内部短,整数和长4字节。 我从2000年的一篇文章中读到它,所以我不知道它现在是多么真实。 对于较新的JVM,使用short over integer / long是否有任何性能提升? 自2000年以来,实施的这一部分是否发生了变化? 谢谢

java中的快速实值随机生成器

java.util.Random.nextDouble()对我来说很慢,我需要一些非常快的东西。 我做了一些谷歌搜索,我发现只有基于整数的快速随机生成器。 这里有什么来自区间<0,1的真实数字吗?