【发布时间】:2012-09-04 17:51:15
【问题描述】:
我刚才在看Java的ConcurrentHashMap的源码,发现这行代码:
/*
* The maximum number of times to tryLock in a prescan before possibly blocking on acquire in
* preparation for a locked segment operation. On multiprocessors, using a bounded number of
* retries maintains cache acquired while locating nodes.
*/
static final int MAX_SCAN_RETRIES =
Runtime.getRuntime().availableProcessors() > 1 ? 64 : 1
MAX_SCAN_RETRIES 用于在获取锁时查找条目。我的问题是如何为多处理器机器确定数字64?有人知道64这个数字背后的原理吗?
【问题讨论】:
-
供参考,来源可以找到here。那里的 javadoc 是:“在可能阻塞获取以准备锁定段操作之前,在预扫描中 tryLock 的最大次数。在多处理器上,使用有限的重试次数来维护在定位节点时获取的缓存。”
-
我的错,我误解了你为什么要评论它。删除该评论。
-
Doug Lea 是这样吗?他似乎编写了该课程:)
-
这个问题出色地展示了良好评论的价值。 (或者在这种情况下,缺少它。)
-
我可能错了,但我猜“每个 Java 虚拟机线程都有自己的 pc(程序计数器)寄存器”说明了为什么选择 64 位。我还在尝试弄清楚多处理器和pc寄存器的关系)docs.oracle.com/javase/specs/jvms/se5.0/html/Overview.doc.html。
标签: java