在观看Joshua Bloch的演出"表现焦虑"后,我阅读了他在"评估Java Pro fi lers的准确性"演讲中提出的论文.引用结论:
我们的结果是令人不安的,因为它们表明在我们的七个基准测试和两个生产JVM中大多数普遍存在的错误 - 并且显着 - 所有四个最先进的专业人员都会产生不正确的专业知识.不正确的配置文件很容易导致性能分析师花时间优化对性能影响最小的冷方法.我们表明,不使用屈服点进行采样的概念验证问题不会遇到上述问题
论文的结论是我们无法真正相信剖析器的结果.但是,使用分析器的替代方法是什么.我们应该回去,只是用我们的感觉做优化吗?
更新:讨论中似乎遗漏的一点是观察者效应.我们能否建立一个真正" 观察者效应 " 的探测器- 免费?
我看到BlockingQueue的这些实现并无法理解它们之间的差异.我的结论到目前为止:
那我什么时候需要SynchronousQueue?这种实现的性能是否优于LinkedBlockingQueue?
为了使它更复杂...为什么当其他人(Executors.newSingleThreadExecutor和Executors.newFixedThreadPool)使用LinkedBlockingQueue 时,Executors.newCachedThreadPool使用SynchronousQueue ?
编辑
第一个问题解决了.但我仍然不明白为什么Executors.newCachedThreadPool使用SynchronousQueue时其他人(Executors.newSingleThreadExecutor和Executors.newFixedThreadPool)使用LinkedBlockingQueue?
我得到的是,使用SynchronousQueue,如果没有自由线程,生产者将被阻止.但由于线程数实际上是无限的(如果需要,将创建新线程),这将永远不会发生.那为什么要使用SynchronousQueue呢?
Eclipse WTP中不同类型的Java EE项目之间有什么不同?
有:
这是我的问题的后续跟进:奇怪的Java泛型.
如果我有这样的代码:
Casts.<X, T> cast(iterable[index]);
Run Code Online (Sandbox Code Playgroud)
我可以添加静态导入并执行:
<X, T> cast(iterable[index]);
Run Code Online (Sandbox Code Playgroud)
Eclipse不允许这样做.但是在Eclipse中看到如此多的静态导入错误后,我并不确定.
PriorityBlockingQueue
是无限的,但我需要以某种方式约束它.实现这一目标的最佳方法是什么?
有关信息,有界PriorityBlockingQueue
将用于a ThreadPoolExecutor
.
注意:通过有界我不想抛出异常,如果发生这种情况,我想将对象放入队列中,然后根据其优先级值进行剪切.有什么好方法可以做这件事吗?
在Paul Tyma的演讲中,我找到了一个面试问题:
什么更难,同步2个线程或同步1000个线程?
从我的角度来看,当然同步1000个线程更难,但我当然不能想到"理所当然"的理由.但由于这是面试问题,可能是我错了(面试问题必须棘手,不是吗?).
在Daniel Korzekwa撰写的文章中,他表示以下代码的表现:
list.map(e => e*2).filter(e => e>10)
Run Code Online (Sandbox Code Playgroud)
比使用Java编写的迭代解决方案更糟糕.
有谁能解释为什么?什么是Scala中此类代码的最佳解决方案(我希望它不是Scala-fied的Java迭代版本)?
java ×7
collections ×2
performance ×2
scala ×2
concurrency ×1
ear ×1
eclipse ×1
eclipse-wtp ×1
generics ×1
geometry ×1
jca ×1
optimization ×1
profiler ×1
sql ×1