如果避免频繁的false sharing造成的性能损耗:
PaddedLong123public static class PaddedLong { public long value = 0, p1, p2, p3, p4, p5, p6; }
PaddedAtomicLong1234567891011public class PaddedAtomicLong extends AtomicLong { public PaddedAtomicLong() { super(); } public PaddedAtomicLong(final long initialValue) { super(initialValue); } public volatile long p1, p2, p3, p4, p5, p6 = 7;}
为何是插入7个long
一般而言cache line是64byte,而每个Java对象都有一个2word(2*4byte)的对象头,而long本身是8byte。
PaddedLong的应用
一般是用在频繁读写的情况下,可以参考之后的OneToOne队列的优化文章