Skip to content

Commit 00a34af

Browse files
committed
java/se: add padding long for baidu uid
1 parent 1bbc7fa commit 00a34af

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

java/javase/javase-jvm/src/main/java/cn/edu/ntu/javase/jvm/MemoryStruct.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cn.edu.ntu.javase.jvm;
22

33
import cn.edu.ntu.javase.common.model.Person;
4+
import cn.edu.ntu.javase.jvm.model.PaddedAtomicLong;
45
import lombok.extern.slf4j.Slf4j;
56
import org.junit.Test;
67
import org.openjdk.jol.info.ClassLayout;
@@ -46,7 +47,7 @@ private static class T {
4647
// Integer a = new Integer(1);
4748
boolean b;
4849
// 对象则只占4个字节, 是指向对的一个指针
49-
String s = "hello46541";
50+
// String s = "hello46541";
5051
}
5152

5253
@Test
@@ -56,4 +57,18 @@ public void testObjectStruct() {
5657
o.hashCode();
5758
log.info(ClassLayout.parseInstance(o).toPrintable());
5859
}
60+
61+
@Test
62+
public void testObject() {
63+
Object o = new Object();
64+
log.info(ClassLayout.parseInstance(o).toPrintable());
65+
o.hashCode();
66+
log.info(ClassLayout.parseInstance(o).toPrintable());
67+
}
68+
69+
@Test
70+
public void testPaddedAtomicLong() {
71+
PaddedAtomicLong o = new PaddedAtomicLong();
72+
log.info(ClassLayout.parseInstance(o).toPrintable());
73+
}
5974
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package cn.edu.ntu.javase.jvm.model;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
6+
import java.util.concurrent.atomic.AtomicLong;
7+
8+
/**
9+
* @author zack <br/>
10+
* @create 2022-03-20 20:48 <br/>
11+
*/
12+
public class PaddedAtomicLong extends AtomicLong {
13+
private static final long serialVersionUID = -3415778863941386253L;
14+
15+
/**
16+
* todo: should fill 5*long? <br>
17+
* Padded 6 long (48 bytes)
18+
*/
19+
public volatile long p1, p2, p3, p4, p5 = 7L;
20+
21+
/** Constructors from {@link AtomicLong} */
22+
public PaddedAtomicLong() {
23+
super();
24+
}
25+
26+
public PaddedAtomicLong(long initialValue) {
27+
super(initialValue);
28+
}
29+
30+
/** To prevent GC optimizations for cleaning unused padded references */
31+
public long sumPaddingToPreventOptimization() {
32+
return p1 + p2 + p3 + p4 + p5;
33+
}
34+
}

0 commit comments

Comments
 (0)