java 多线程 垃圾回收_除了互斥锁或垃圾回收以外,还有哪些机制可以减慢我的多线程Java程序?...

问题

我有一段Java代码(如果相关,则为JDK 1.6.0._22),可实现无互斥的无状态,无副作用的功能。但是,它确实占用大量内存(我不知道这是否相关)。

过去,我曾访问过Sun

Laboratories,并收集了标准的“性能与线程数”曲线。由于此函数没有互斥体,因此它具有一个不错的图形,尽管随着线程数量的增加,垃圾回收也开始了。经过一些垃圾收集调整之后,我能够使该曲线几乎平坦。

我现在在Intel硬件上进行相同的实验。硬件有4个CPU,每个CPU都有8个内核和超线程。这给出了64个availableProcessors()。不幸的是,“性能与线程数”的曲线很好地缩放了1、2、3个线程,上限为3个线程。3个线程之后,我可以根据需要为任务分配尽可能多的线程,而性能却没有任何改善

尝试解决问题

我最初的想法是我很愚蠢,并在某个地方引入了一些同步代码。通常,要解决此问题,我运行JConsole或JVisualVM,并查看线程堆栈跟踪。如果我有64个线程以3的速度运行,那么我希望其中有61个线程正等待输入互斥体。我没找到这个。相反,我发现所有线程都在运行:非常缓慢。

第二个想法是,时间框架可能会引入问题。我用一个虚拟函数替换了我的函数,使用AtomicLong可以算出十亿。这可以通过线程数进行漂亮的扩展:使用64个线程比使用1个线程,我可以算出10倍10,000倍的10,000倍。

我以为(绝望的开始)垃圾回收确实花费了很长时间,所以我调整了垃圾回收参数。尽管这改善了我的延迟变化,但对吞吐量没有影响:我仍然有64个线程以我希望3的速度运行。

我已经下载了英特尔工具VTunes,但是我的技能很弱:它是一个复杂的工具,我还不了解。我收到了订购书:给自己一个有趣的圣诞节礼物,但是为时不晚,无法解决我当前的问题

我可以使用哪些工具(心理或软件)来加深对正在发生的事情的了解?

除了互斥锁或垃圾回收以外,还有哪些机制可能会降低我的代码速度?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值