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

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

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

后来的许多实验中,我发现JVM没什么作用,但我也发现了JDump的强大功能。64个线程中的50个位于以下行。

java.lang.Thread.State: RUNNABLE    at java.util.Random.next(Random.java:189)    at java.util.Random.nextInt(Random.java:239)    at sun.misc.Hashing.randomHashSeed(Hashing.java:254)    at java.util.HashMap.<init>(HashMap.java:255)    at java.util.HashMap.<init>(HashMap.java:297)

Random.next看起来像这样

 protected int next(int bits) {    long oldseed, nextseed;    AtomicLong seed = this.seed;    do {        oldseed = seed.get();        nextseed = (oldseed * multiplier + addend) & mask;    } while (!seed.compareAndSet(oldseed, nextseed));    return (int)(nextseed >>> (48 - bits)); }

最有趣的是,这并不是一个明显的锁,因此我用来发现互斥锁的工具无法正常工作。

因此,似乎任何Java哈希图的创建都会导致应用程序停止可伸缩性(我夸大了但不多)。我的应用程序确实大量使用了哈希图,所以我想我要么重写哈希图,要么重写应用程序。

我在提出一个单独的问题,以查看如何处理。

谢谢你的帮助



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5013905.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存