{
/**
* 构造
*
- * @param key 原始Key,不能为{@code null}
+ * @param obj 原始对象
* @param queue {@link ReferenceQueue}
*/
- public WeakObj(final T key, final ReferenceQueue super T> queue) {
- super(key, queue);
- hashCode = key.hashCode();
+ public WeakObj(final T obj, final ReferenceQueue super T> queue) {
+ super(obj, queue);
+ hashCode = Objects.hashCode(obj);
}
@Override
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/ref/package-info.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/ref/package-info.java
new file mode 100644
index 000000000..c0ea6e2d6
--- /dev/null
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/ref/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2024. looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * https://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+/**
+ * 引用工具封装,主要针对{@link java.lang.ref.Reference} 工具化封装
+ * 主要封装包括:
+ *
+ * 1. {@link java.lang.ref.SoftReference} 软引用,在GC报告内存不足时会被GC回收
+ * 2. {@link java.lang.ref.WeakReference} 弱引用,在GC时发现弱引用会回收其对象
+ * 3. {@link java.lang.ref.PhantomReference} 虚引用,在GC时发现虚引用对象,会将{@link java.lang.ref.PhantomReference}插入{@link java.lang.ref.ReferenceQueue}。 此时对象未被真正回收,要等到{@link java.lang.ref.ReferenceQueue}被真正处理后才会被回收。
+ *
+ */
+package org.dromara.hutool.core.lang.ref;
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/ReferenceConcurrentMap.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/ReferenceConcurrentMap.java
index 6389fef0c..e189a0d69 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/ReferenceConcurrentMap.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/ReferenceConcurrentMap.java
@@ -13,7 +13,7 @@
package org.dromara.hutool.core.map.reference;
import org.dromara.hutool.core.map.MapUtil;
-import org.dromara.hutool.core.util.ReferenceUtil;
+import org.dromara.hutool.core.lang.ref.ReferenceUtil;
import java.io.Serializable;
import java.lang.ref.Reference;
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/ReferenceKeyConcurrentMap.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/ReferenceKeyConcurrentMap.java
index 24ac7f24b..3c53ca5d7 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/ReferenceKeyConcurrentMap.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/ReferenceKeyConcurrentMap.java
@@ -13,7 +13,9 @@
package org.dromara.hutool.core.map.reference;
import org.dromara.hutool.core.collection.CollUtil;
-import org.dromara.hutool.core.util.ReferenceUtil;
+import org.dromara.hutool.core.lang.ref.ReferenceType;
+import org.dromara.hutool.core.lang.ref.SoftObj;
+import org.dromara.hutool.core.lang.ref.WeakObj;
import java.io.Serializable;
import java.lang.ref.Reference;
@@ -38,7 +40,7 @@ public class ReferenceKeyConcurrentMap implements ConcurrentMap, Ite
final ConcurrentMap, V> raw;
private final ReferenceQueue lastQueue;
- private final ReferenceUtil.ReferenceType keyType;
+ private final ReferenceType keyType;
/**
* 回收监听
*/
@@ -52,7 +54,7 @@ public class ReferenceKeyConcurrentMap implements ConcurrentMap, Ite
* @param raw {@link ConcurrentMap}实现
* @param referenceType Reference类型
*/
- public ReferenceKeyConcurrentMap(final ConcurrentMap, V> raw, final ReferenceUtil.ReferenceType referenceType) {
+ public ReferenceKeyConcurrentMap(final ConcurrentMap, V> raw, final ReferenceType referenceType) {
this.raw = raw;
this.keyType = referenceType;
lastQueue = new ReferenceQueue<>();
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/SoftKeyConcurrentMap.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/SoftKeyConcurrentMap.java
index 0871d500b..7cc0ad1f9 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/SoftKeyConcurrentMap.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/SoftKeyConcurrentMap.java
@@ -12,8 +12,8 @@
package org.dromara.hutool.core.map.reference;
+import org.dromara.hutool.core.lang.ref.ReferenceType;
import org.dromara.hutool.core.map.concurrent.SafeConcurrentHashMap;
-import org.dromara.hutool.core.util.ReferenceUtil;
import java.lang.ref.Reference;
import java.util.concurrent.ConcurrentMap;
@@ -42,6 +42,6 @@ public class SoftKeyConcurrentMap extends ReferenceKeyConcurrentMap
* @param raw {@link ConcurrentMap}实现
*/
public SoftKeyConcurrentMap(final ConcurrentMap, V> raw) {
- super(raw, ReferenceUtil.ReferenceType.SOFT);
+ super(raw, ReferenceType.SOFT);
}
}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/WeakKeyConcurrentMap.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/WeakKeyConcurrentMap.java
index 3bae31b25..d5be69e76 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/WeakKeyConcurrentMap.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/reference/WeakKeyConcurrentMap.java
@@ -12,8 +12,8 @@
package org.dromara.hutool.core.map.reference;
+import org.dromara.hutool.core.lang.ref.ReferenceType;
import org.dromara.hutool.core.map.concurrent.SafeConcurrentHashMap;
-import org.dromara.hutool.core.util.ReferenceUtil;
import java.lang.ref.Reference;
import java.util.concurrent.ConcurrentMap;
@@ -43,6 +43,6 @@ public class WeakKeyConcurrentMap extends ReferenceKeyConcurrentMap
* @param raw {@link ConcurrentMap}实现
*/
public WeakKeyConcurrentMap(final ConcurrentMap, V> raw) {
- super(raw, ReferenceUtil.ReferenceType.WEAK);
+ super(raw, ReferenceType.WEAK);
}
}
diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/util/ReferenceUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/util/ReferenceUtilTest.java
index 656ac6a76..234bc5ea8 100644
--- a/hutool-core/src/test/java/org/dromara/hutool/core/util/ReferenceUtilTest.java
+++ b/hutool-core/src/test/java/org/dromara/hutool/core/util/ReferenceUtilTest.java
@@ -14,6 +14,8 @@ package org.dromara.hutool.core.util;
import org.dromara.hutool.core.lang.Console;
import org.dromara.hutool.core.lang.mutable.MutableObj;
+import org.dromara.hutool.core.lang.ref.ReferenceType;
+import org.dromara.hutool.core.lang.ref.ReferenceUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
@@ -27,21 +29,21 @@ public class ReferenceUtilTest {
@Test
public void createWeakTest(){
- final Reference integerReference = ReferenceUtil.of(ReferenceUtil.ReferenceType.WEAK, 1);
+ final Reference integerReference = ReferenceUtil.of(ReferenceType.WEAK, 1);
Assertions.assertInstanceOf(WeakReference.class, integerReference);
Assertions.assertEquals(Integer.valueOf(1), integerReference.get());
}
@Test
public void createSoftTest(){
- final Reference integerReference = ReferenceUtil.of(ReferenceUtil.ReferenceType.SOFT, 1);
+ final Reference integerReference = ReferenceUtil.of(ReferenceType.SOFT, 1);
Assertions.assertInstanceOf(SoftReference.class, integerReference);
Assertions.assertEquals(Integer.valueOf(1), integerReference.get());
}
@Test
public void createPhantomTest(){
- final Reference integerReference = ReferenceUtil.of(ReferenceUtil.ReferenceType.PHANTOM, 1);
+ final Reference integerReference = ReferenceUtil.of(ReferenceType.PHANTOM, 1);
Assertions.assertInstanceOf(PhantomReference.class, integerReference);
// get方法永远都返回null,PhantomReference只能用来监控对象的GC状况
Assertions.assertNull(integerReference.get());