20200729 synchronzied 马士兵视频学习笔记
c,c++ 自己管理内存,释放内存
java有自己的GC垃圾回收机制,不用手工管理,缺点是会有stw
Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。
GC时的Stop the World(STW)是大家最大的敌人。但可能很多人还不清楚,除了GC,JVM下还会发生停顿现象。
synchronzied很重,是针对jdk1.0-1.2而言,因为锁是由os的内核态管理。1.2-1.6没有那么重,性能已经优化,交由用户态来管理
Object object = new Object(); int a = 0; synchronized (object) { a++; }
java对象布局
对象头:mark word 4byte
klass pointer 4byte
对象成员(实例数据)
对齐数据 保证对象头+对象成员+对齐数据是8的整数倍
打印对象头
<dependencies> <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.11</version> </dependency> </dependencies>
public static void main(String[] args) { Object object = new Object(); System.out.println(ClassLayout.parseInstance(object).toPrintable()); }
java.lang.Object 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) 28 0f ff 7f (00101000 00001111 11111111 01111111) (2147421992) 12 4 (loss due to the next object alignment) Instance size: 16 bytes Space losses: 0 bytes internal + 4 bytes external = 4 bytes total