com.jvmbytes.spy.util.ObjectIDs Maven / Gradle / Ivy
package com.jvmbytes.spy.util;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.WeakHashMap;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* 给指定的Java对象分配JVM唯一ID
*
* 1. 该ID为int型
* 2. Object如果被GC回收,对应的ID会被失效,内存也会被释放
* 3. int为[0,{@link Integer#MAX_VALUE}]之间的整数
* 4. 这个类当前无需考虑对象溢出的情况,因为我不需要,我放入的对象数量很少,就这么简单
*
*
* @author luanjia
*/
public class ObjectIDs {
/**
* 空对象映射
*/
public static final int NULL_ID = 0;
/**
* 对象ID序列生成器,生成范围[1,{@link Integer#MAX_VALUE}]之间的整数
*/
private final Sequencer objectIDSequencer = new Sequencer();
/**
* 全局读写锁:用于维护世界的和平
*
* 用于维护{@link #identityObjectMapping}和{@link #objectIDMapping}之间数据的一致性
*
*/
private final ReadWriteLock rwLock = new ReentrantReadWriteLock();
/**
* 全局<对象:ID>映射表
*/
private final WeakHashMap