并发编程之Java 对象头的详细解析

简介: 并发编程之Java 对象头的详细解析

Java 对象头

以 32 位虚拟机为例

普通对象

1. |--------------------------------------------------------------|
2. |                    Object Header (64 bits)                   |
3. |------------------------------------|-------------------------|
4. |       Mark Word (32 bits)          |   Klass Word (32 bits)  |
5. |------------------------------------|-------------------------|

数组对象

1. |---------------------------------------------------------------------------------|
2. |                             Object Header (96 bits)                             |
3. |--------------------------------|-----------------------|------------------------|
4. |        Mark Word(32bits)       |   Klass Word(32bits)  |  array length(32bits)  |
5. |--------------------------------|-----------------------|------------------------|

其中 Mark Word 结构为

1. |-------------------------------------------------------|--------------------|
2. |                  Mark Word (32 bits)                  |        State       |
3. |-------------------------------------------------------|--------------------|
4. |    hashcode:25  | age:4 |   biased_lock:0   |   01    |       Normal       |
5. |-------------------------------------------------------|--------------------|
6. |thread:23|epoch:2| age:4 |   biased_lock:1   |   01    |       Biased       |
7. |-------------------------------------------------------|--------------------|
8. |          ptr_to_lock_record:30              |   00    | Lightweight Locked |
9. |-------------------------------------------------------|--------------------|
10. |          ptr_to_heavyweight_monitor:30      |   10    | Heavyweight Locked |
11. |-------------------------------------------------------|--------------------|
12. |                                             |   11    |    Marked for GC   |
13. |-------------------------------------------------------|--------------------|

64 位虚拟机 Mark Word

1. |--------------------------------------------------------------------|--------------------|
2. |                          Mark Word (64 bits)                       |        State       |
3. |--------------------------------------------------------------------|--------------------|
4. | unused:25 | hashcode:31 | unused:1 | age:4 | biased_lock:0 |  01   |        Normal      |
5. |--------------------------------------------------------------------|--------------------|
6. | thread:54 |   epoch:2   | unused:1 | age:4 | biased_lock:1 |  01   |        Biased      |
7. |--------------------------------------------------------------------|--------------------|
8. |                    ptr_to_lock_record:62                   |  00   | Lightweight Locked |
9. |--------------------------------------------------------------------|--------------------|
10. |                 ptr_to_heavyweight_monitor:62              |  10   | Heavyweight Locked |
11. |--------------------------------------------------------------------|--------------------|
12. |                                                            |  11   |    Marked for GC   |
13. |--------------------------------------------------------------------|--------------------|


相关文章
|
16小时前
|
安全 Java 程序员
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第20天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细解析synchronized关键字、ReentrantLock类以及java.util.concurrent包中的高级工具类,如Semaphore、CountDownLatch和CyclicBarrier等。通过实例演示如何使用这些工具来提高多线程程序的性能和可靠性。
|
16小时前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第20天】在Java并发编程中,线程安全和性能优化是两个关键要素。本文将深入探讨Java并发编程的基本概念、线程安全的实现方法以及性能优化技巧。通过分析同步机制、锁优化、无锁数据结构和并发工具类的使用,我们将了解如何在保证线程安全的前提下,提高程序的性能。
|
23小时前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第20天】 在Java开发中,正确处理并发问题对于确保应用的稳定性和提高性能至关重要。本文将深入探讨Java并发编程的核心概念——线程安全,以及如何通过各种技术和策略实现它,同时保持甚至提升系统性能。我们将分析并发问题的根源,包括共享资源的竞争条件、死锁以及线程活性问题,并探索解决方案如同步机制、锁优化、无锁数据结构和并发工具类等。文章旨在为开发者提供一个清晰的指南,帮助他们在编写多线程应用时做出明智的决策,确保应用的高效和稳定运行。
|
2天前
|
Java
Java一分钟之-并发编程:线程间通信(Phaser, CyclicBarrier, Semaphore)
【5月更文挑战第19天】Java并发编程中,Phaser、CyclicBarrier和Semaphore是三种强大的同步工具。Phaser用于阶段性任务协调,支持动态注册;CyclicBarrier允许线程同步执行,适合循环任务;Semaphore控制资源访问线程数,常用于限流和资源池管理。了解其使用场景、常见问题及避免策略,结合代码示例,能有效提升并发程序效率。注意异常处理和资源管理,以防止并发问题。
23 2
|
2天前
|
安全 Java 容器
Java一分钟之-并发编程:线程安全的集合类
【5月更文挑战第19天】Java提供线程安全集合类以解决并发环境中的数据一致性问题。例如,Vector是线程安全但效率低;可以使用Collections.synchronizedXxx将ArrayList或HashMap同步;ConcurrentHashMap是高效线程安全的映射;CopyOnWriteArrayList和CopyOnWriteArraySet适合读多写少场景;LinkedBlockingQueue是生产者-消费者模型中的线程安全队列。注意,过度同步可能影响性能,应尽量减少共享状态并利用并发工具类。
16 2
|
2天前
|
Java
深入理解Java并发编程:线程池的应用与优化
【5月更文挑战第18天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将了解线程池的基本概念,应用场景,以及如何优化线程池的性能。通过实例分析,我们将看到线程池如何提高系统性能,减少资源消耗,并提高系统的响应速度。
13 5
|
2天前
|
安全 Java 容器
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第18天】随着多核处理器的普及,并发编程变得越来越重要。Java提供了丰富的并发编程工具,如synchronized关键字、显式锁Lock、原子类、并发容器等。本文将深入探讨Java并发编程的核心概念,包括线程安全、死锁、资源竞争等,并分享一些性能优化的技巧。
|
3天前
|
安全 Java
Java一分钟之-并发编程:原子类(AtomicInteger, AtomicReference)
【5月更文挑战第18天】Java并发编程中的原子类如`AtomicInteger`和`AtomicReference`提供无锁原子操作,适用于高性能并发场景。`AtomicInteger`支持原子整数操作,而`AtomicReference`允许原子更新对象引用。常见问题包括误解原子性、过度依赖原子类以及忽略对象内部状态的并发控制。要避免这些问题,需明确原子操作边界,合理选择同步策略,并精确控制原子更新。示例代码展示了如何使用这两个类。正确理解和使用原子类是构建高效并发程序的关键。
12 1
|
3天前
|
安全 Java 容器
Java一分钟之-并发编程:并发容器(ConcurrentHashMap, CopyOnWriteArrayList)
【5月更文挑战第18天】本文探讨了Java并发编程中的`ConcurrentHashMap`和`CopyOnWriteArrayList`,两者为多线程数据共享提供高效、线程安全的解决方案。`ConcurrentHashMap`采用分段锁策略,而`CopyOnWriteArrayList`适合读多写少的场景。注意,`ConcurrentHashMap`的`forEach`需避免手动同步,且并发修改时可能导致`ConcurrentModificationException`。`CopyOnWriteArrayList`在写操作时会复制数组。理解和正确使用这些特性是优化并发性能的关键。
9 1
|
3天前
|
Java 编译器
Java并发编程中的锁优化策略
【5月更文挑战第18天】在Java并发编程中,锁是一种常用的同步机制,用于保护共享资源的访问。然而,不当的锁使用可能导致性能问题和死锁风险。本文将探讨Java中锁的优化策略,包括锁粗化、锁消除、锁分离和读写锁等技术,以提高并发程序的性能和可靠性。

推荐镜像

更多