Tag: 性能

由于从boss线程传递给工作线程的请求导致的netty延迟?

我有一些关于Netty(服务器端),TCP / IP应用程序的问题; 我想知道在将boss请求从boss线程传递给工作线程时是否会因为netty(由于缺少配置等)而存在延迟? 我在用 : new OrderedMemoryAwareThreadPoolExecutor(350, 0, 0, 1, TimeUnit.SECONDS); 实际上,我设置最大线程数350因为我不确定最佳数字。 我每分钟记录同时工作的线程数,似乎平均值太低(几乎不超过10 )。 所以我会减少这个数字,因为它不是必需的。 有没有其他参数,重要的一点,我应该知道,以获得最佳性能? bootstrap.setOption(“tcpNoDelay”, true); – 设置此参数有什么缺点吗? 考虑到交货时间非常重要。 线程池执行器: OrderedMemoryAwareThreadPoolExecutor executor = new OrderedMemoryAwareThreadPoolExecutor(48, 0, 0, 1, TimeUnit.SECONDS); 这是我的管道工厂: ChannelPipeline pipeline = pipeline(); pipeline.addLast(“frameDecoder”, new DelimiterBasedFrameDecoder(GProperties.getIntProperty(“decoder.maxFrameLength”, 8000 * 1024), Delimiters.nulDelimiter())); pipeline.addLast(“stringDecoder”, new StringDecoder( CharsetUtil.UTF_8 )); pipeline.addLast(“frameEncoder”, new NullTermMessageEncoder()); pipeline.addLast(“stringEncoder”, new JSONEncoder( […]

在Java 8中更改为HashMap哈希函数

在java 8 java.util.Hashmap中,我发现了一个变化: static int hash(int h) { h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4); 到 : static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); 从代码中可以看出,新函数是低16位的简单XOR ,高16位保持高16位不变,与之前实现中的几个不同的位移相反,并且从评论中看,这不太有效。将较低位的大量冲突的散列函数的结果分配给不同的桶,但通过减少操作来节省CPU周期。 我在发行说明中看到的唯一一件事就是从链接列表到平衡树的变化以存储碰撞键(我认为这可能会改变计算好哈希的时间量),我特别感兴趣的是看到如果此更改对大型哈希映射有任何预期的性能影响。 是否有关于此更改的任何信息,或者是否有更好的哈希函数知识的人知道此更改的含义可能是什么(如果有的话,我可能只是误解了代码)以及是否需要生成哈希迁移到Java […]

在Java中尾部/轮询日志文件的最有效方法

有很多方法,可以使用创建程序并只调用Unix tail命令,但问题是该进程必须安装在安装了尾部的Unix机器上。 另一种选择是直接读取文件,直到没有更多行,睡眠一段时间然后尝试读取下一行并重复。 问题是我如何/如何轮询正在写入的文件。 AFAIK在Java中没有办法在文件被修改时获得异步通知,因为这个级别太低(来自操作系统的东西)。 我也知道没有lib支持这个。 我在想一个更好的方法可能是在文件的修改日期进行睡眠/轮询..? 有解决方案?

Elasticsearch:使用Java添加手动映射

我无法改变映射。 任何人都可以帮我找到我的代码中的错误吗? 我已经找到了这种标准方法来根据几个教程更改映射。 但是当我尝试调用映射结构时,在创建manuall映射之后会出现一个空白的映射结构。 但是在插入一些数据之后会出现映射规范,因为ES当然是默认的。 更具体地说,请参阅下面的代码。 public class ElasticTest { private String dbname = “ElasticSearch”; private String index = “indextest”; private String type = “table”; private Client client = null; private Node node = null; public ElasticTest(){ this.node = nodeBuilder().local(true).node(); this.client = node.client(); if(isIndexExist(index)){ deleteIndex(this.client, index); createIndex(index); } else{ createIndex(index); } System.out.println(“mapping structure before data […]

Hibernate @LazyCollection注释的用途是什么?

我有2个实体作为父和子作为OneToMany关系 @Entity public class Parent { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String name; @OneToMany(mappedBy = “parent”, fetch = FetchType.LAZY) @IndexColumn(name = “index”, base = 1) @Cascade(org.hibernate.annotations.CascadeType.ALL) @LazyCollection(LazyCollectionOption.EXTRA) private List childs = new ArrayList(); // getter and setter } 那么这里有什么用@LazyCollection(LazyCollectionOption.EXTRA)以及什么时候会出现在图片中,比如哪个操作带有子列表,这将是有益的?

EJB与WebService? 绩效观点

好吧我们现在有情况决定。 我认为stackoverflow是讨论的最佳场所。 背景: 我们有2个JVM企业应用服务器,每个都部署了一个应用程序。 我们需要启用从一台机器到另一台机器的业务function调用。 假设一个是客户端而另一个是服务器。 现在从性能角度来看哪种方法更好地设计服务器应用程序。 通过记住以下事项: 我有2个选择: 纯EJB应用程序意味着EJB客户端和EJB服务器组件 WebService简单Java方法(没有基于EJB的Web服务,因为它简直就是混乱) 我的绩效指标:速度:哪种设计方法可以更快地处理请求。 我的业务应用程序将部署在32位机器上! 另请注意,有2个JVM,一个是32位和64位(现在避免这种情况是不可避免的) 请提供您的反馈 问候 阿赫亚

如何使用LinkedHashMap中的类似function实现ConcurrentHashMap?

我使用了LinkedHashMap和accessOrder true,并且随时允许最多500个条目作为数据的LRU缓存。 但由于可伸缩性问题,我想转向一些线程安全的替代方案。 ConcurrentHashMap在这方面似乎很好,但缺少LinkedHashMap找到的accessOrder和removeEldestEntry(Map.Entry e)的function。 任何人都可以指向某些链接或帮助我简化实施。

除了互斥锁或垃圾收集之外的哪些机制可以减慢我的multithreadingjava程序?

问题 我有一段java代码(相关的JDK 1.6.0._22),它实现了一个没有互斥量的无状态,无副作用的函数。 然而它确实使用了大量内存(我不知道这是否相关)。 在过去,我访问过Sun Laboratories并收集了标准的“性能与线程数”曲线。 由于这个函数没有互斥锁,它有一个很好的图形,尽管随着线程数量的增加垃圾收集开始。 经过一些垃圾收集调整后,我能够使这条曲线几乎平坦。 我现在在英特尔硬件上做同样的实验。 硬件有4个CPU,每个CPU有8个内核和超线程。 这给出了64个availableProcessors()。 不幸的是,“性能与线程数”的曲线很好地适用于1,2,3线程和3线程的大写。 在3个线程之后,我可以根据需要添加任意数量的线程,并且性能不会更好 尝试解决问题 我的第一个想法是我曾经愚蠢并在某处引入了一些同步代码。 通常要解决此问题,我运行JConsole或JVisualVM,并查看线程堆栈跟踪。 如果我有64个线程以3的速度运行,我预计其中有61个会等待进入互斥锁。 我没有找到这个。 相反,我发现所有线程都在运行:非常慢。 第二个想法是,时间框架可能引入了问题。 我用一个虚拟函数替换了我的函数,使用AtomicLong计算到十亿。 这与线程数量相当精确:使用64个线程比使用1个线程,我能够快速计算到10倍10,000倍。 我想(绝望开始)也许垃圾收集花了很长时间,所以我调整了垃圾收集参数。 虽然这改善了我的延迟变化,但它对吞吐量没有影响:我仍然有64个线程以我期望3运行的速度运行。 我已经下载了英特尔工具VTunes,但我的技巧很弱:它是一个复杂的工具,我还不明白。 我订购了说明书:给自己一个有趣的圣诞礼物,但是现在有点太晚了 题 我可以用什么工具(精神或软件)来提高我对正在发生的事情的理解? 除了互斥锁或垃圾收集之外的哪些机制可能会减慢我的代码速度?

现代for循环的原始数组

原始数组上的for循环之间是否有任何性能差异? 假设: double[] doubleArray = new double[300000]; for (double var: doubleArray) someComplexCalculation(var); 要么 : for ( int i = 0, y = doubleArray.length; i < y; i++) someComplexCalculation(doubleArray[i]); 测试结果 我实际上描述了它: Total timeused for modern loop= 13269ms Total timeused for old loop = 15370ms 所以现代循环实际上运行得更快,至少在我的Mac OSX JVM 1.5上。

Java for循环性能问题

考虑这个例子: public static void main(final String[] args) { final List myList = Arrays.asList(“A”, “B”, “C”, “D”); final long start = System.currentTimeMillis(); for (int i = 1000000; i > myList.size(); i–) { System.out.println(“Hello”); } final long stop = System.currentTimeMillis(); System.out.println(“Finish: ” + (stop – start)); } VS public static void main(final String[] args) { final List […]