<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.10</version>
</dependency>
@Slf4j
public class TestSyn {
@Test
public void test ( ) throws InterruptedException {
User t= new User ( ) ;
log. debug ( "开始》》》" ) ;
log. debug ( ClassLayout. parseInstance ( t) . toPrintable ( ) ) ;
log. debug ( "开启另一个线程》》" ) ;
new Thread ( ( ) - > {
synchronized ( t) {
try {
Thread. sleep ( 1000 ) ;
} catch ( InterruptedException e) {
e. printStackTrace ( ) ;
}
}
} ) . start ( ) ;
log. debug ( "锁竞争》》" ) ;
printHeader ( t) ;
Thread. sleep ( 3000 ) ;
log. debug ( "无锁竞争》》" ) ;
log. debug ( ClassLayout. parseInstance ( t) . toPrintable ( ) ) ;
printHeader ( t) ;
}
public void printHeader ( User t) {
synchronized ( t) {
log. debug ( ClassLayout. parseInstance ( t) . toPrintable ( ) ) ;
}
}
}
15 : 50 : 31.655 [ main] DEBUG com. example. demo3. TestSyn - 开始》》》
15 : 50 : 33.928 [ main] DEBUG com. example. demo3. TestSyn - com. example. demo3. User object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 ( object header) 05 00 00 00 ( 00000101 00000000 00000000 00000000 ) ( 5 )
4 4 ( object header) 00 00 00 00 ( 00000000 00000000 00000000 00000000 ) ( 0 )
8 4 ( object header) 58 6d 4f 1 c ( 01011000 01101101 01001111 00011100 ) ( 474967384 )
12 4 ( object header) 00 00 00 00 ( 00000000 00000000 00000000 00000000 ) ( 0 )
16 1 boolean User. sex false
17 7 ( alignment/ padding gap)
24 8 java. lang. String User. name null
32 8 java. lang. Integer User. age null
Instance size: 40 bytes
Space losses: 7 bytes internal + 0 bytes external = 7 bytes total
15 : 50 : 33.928 [ main] DEBUG com. example. demo3. TestSyn - 开启另一个线程》》
15 : 50 : 33.929 [ main] DEBUG com. example. demo3. TestSyn - 锁竞争》》
15 : 50 : 33.930 [ main] DEBUG com. example. demo3. TestSyn - com. example. demo3. User object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 ( object header) 3 a 17 aa 1 c ( 00111010 00010111 10101010 00011100 ) ( 480909114 )
4 4 ( object header) 00 00 00 00 ( 00000000 00000000 00000000 00000000 ) ( 0 )
8 4 ( object header) 58 6d 4f 1 c ( 01011000 01101101 01001111 00011100 ) ( 474967384 )
12 4 ( object header) 00 00 00 00 ( 00000000 00000000 00000000 00000000 ) ( 0 )
16 1 boolean User. sex false
17 7 ( alignment/ padding gap)
24 8 java. lang. String User. name null
32 8 java. lang. Integer User. age null
Instance size: 40 bytes
Space losses: 7 bytes internal + 0 bytes external = 7 bytes total
15 : 50 : 36.930 [ main] DEBUG com. example. demo3. TestSyn - 无锁竞争》》
15 : 50 : 36.931 [ main] DEBUG com. example. demo3. TestSyn - com. example. demo3. User object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 ( object header) 01 00 00 00 ( 00000001 00000000 00000000 00000000 ) ( 1 )
4 4 ( object header) 00 00 00 00 ( 00000000 00000000 00000000 00000000 ) ( 0 )
8 4 ( object header) 58 6d 4f 1 c ( 01011000 01101101 01001111 00011100 ) ( 474967384 )
12 4 ( object header) 00 00 00 00 ( 00000000 00000000 00000000 00000000 ) ( 0 )
16 1 boolean User. sex false
17 7 ( alignment/ padding gap)
24 8 java. lang. String User. name null
32 8 java. lang. Integer User. age null
Instance size: 40 bytes
Space losses: 7 bytes internal + 0 bytes external = 7 bytes total
15 : 50 : 36.932 [ main] DEBUG com. example. demo3. TestSyn - com. example. demo3. User object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 ( object header) c8 e5 ff 02 ( 11001000 11100101 11111111 00000010 ) ( 50324936 )
4 4 ( object header) 00 00 00 00 ( 00000000 00000000 00000000 00000000 ) ( 0 )
8 4 ( object header) 58 6d 4f 1 c ( 01011000 01101101 01001111 00011100 ) ( 474967384 )
12 4 ( object header) 00 00 00 00 ( 00000000 00000000 00000000 00000000 ) ( 0 )
16 1 boolean User. sex false
17 7 ( alignment/ padding gap)
24 8 java. lang. String User. name null
32 8 java. lang. Integer User. age null
Instance size: 40 bytes
Space losses: 7 bytes internal + 0 bytes external = 7 bytes total
Process finished with exit code 0