|--------------------------------------------------------------| | Object Header (64 bits) | |------------------------------------|-------------------------| | Mark Word (32 bits) | Klass Word (32 bits) | |------------------------------------|-------------------------|
数组对象的完整对象头信息:
1 2 3 4 5
|---------------------------------------------------------------------------------| | Object Header (96 bits) | |--------------------------------|-----------------------|------------------------| | Mark Word(32bits) | Klass Word(32bits) | array length(32bits) | |--------------------------------|-----------------------|------------------------|
重量级锁
当前线程在获取到锁后,就会将 obj 的 Mark Word 内原本存储的信息(hashcode、age 等)暂存到 Monitor 对象中,然后在 Mark Word 中保存这个 Monitor 的物理地址 ptr_to_heavyweight_monitor(这样其他想加锁的线程就能通过该指针访问到 Monitor 对象),注意:该操作是通过 Unsafe 类保证 CAS 的原子性。同时 Monitor 对象中的 Owner 将指向该线程 Thread-0。
当解锁时,会再将暂存在 Monitor 中的 Mark Word 信息再 CAS 交换回 obj 的对象头中。
if (!capture.isOpened()) { printf("could not open camera...\n"); return-1; } cv::namedWindow("capture", WINDOW_AUTOSIZE);
cv::Mat frame; int index = 0;
while (true) { if (!capture.read(frame)) break; cv::imshow("capture", frame); char c = waitKey(1); if (c >= 49) { index = c - 49; } if (c == 27) { break; } }