类 DefaultBeetlMemoryManager
java.lang.Object
org.beetl.core.impl.DefaultBeetlMemoryManager
- 所有已实现的接口:
IBeetlMemoryManager
通过维护 Collection 的引用,来避免重复创建 Collection 的实例
当 Collection 的容量较大时,MemoryManager的优势开始凸显,减少了 Collection 扩容的开销
// 以下例子演示了如何通过 DefaultBeetlMemoryManager 使代码性能提升了 45% (1058ms → 578ms)
public void testRecoveryList() {
String tag = "recoveryList#";
int id = 1;
// performance: 当 Collection 的容量较大时,MemoryManager的优势开始凸显,减少了 Collection 扩容的开销
final int size = 20;
for (int i = 0; i < size; i++) {
List list = new ArrayList();
opList(list); // List 的数据操作
BeetlRuntime.getMemoryManager().recoveryList(list); // 回收引用
}
long time1 = System.nanoTime();
for (int i = 0; i < size; i++) { // 耗时: 578ms
List list = BeetlRuntime.getMemoryManager().takeList(); // 获取引用,没有则创建
opList(list); // List 的数据操作
}
long time2 = System.nanoTime();
for (int i = 0; i < size; i++) { // 耗时: 1058ms
List list = new ArrayList(); // 常规场景创建 List 的实例
opList(list); // List 的数据操作
}
long time3 = System.nanoTime();
System.out.println(tag + id++ + " 耗时: " + (time2 - time1) / 1_000_000 + "ms");
System.out.println(tag + id++ + " 耗时: " + (time3 - time2) / 1_000_000 + "ms");
System.out.println(BeetlRuntime.getMemoryManager());
}
// 一个模拟 list 操作的方法
private static void opList(List list) {
for (int i = 0; i < 1000_000; i++) {
list.add(i);
}
}
-
嵌套类概要
从接口继承的嵌套类/接口 org.beetl.core.runtime.IBeetlMemoryManager
IBeetlMemoryManager.Clearable -
字段概要
字段修饰符和类型字段说明static final int缓存List实例的数量上限static final int缓存Map实例的数量上限static final int在每个LinkedList中缓存IBeetlMemoryManager.Clearable实例的数量上限static final int缓存Set实例的数量上限 -
方法概要
修饰符和类型方法说明void清理 ListPool SetPool MapPool 和 ObjectPool 对于 ObjectPool,会依次调用每个实例的IBeetlMemoryManager.Clearable.clear()方法static IBeetlMemoryManagerget()获取 DefaultBeetlMemoryManager 实例booleanrecoveryList(List garbage) 将一个List实例放入池中booleanrecoveryMap(Map garbage) 将一个Map实例放入池中boolean将一个IBeetlMemoryManager.Clearable实例放入池中booleanrecoverySet(Set garbage) 将一个Set实例放入池中int返回 List 池中保存的 List 实例的个数int返回 Map 池中保存的 Map 实例的个数int返回 Object 池中实例的个数int返回 Object 池中类型的个数int返回 Set 池中保存的 Set 实例的个数takeList()获取一个List的实例takeMap()获取一个Map的实例获取一个IBeetlMemoryManager.Clearable的实例takeSet()获取一个Set的实例toString()
-
字段详细资料
-
sMapPoolMaxSize
public static final int sMapPoolMaxSize缓存Map实例的数量上限- 另请参阅:
-
sListPoolMaxSize
public static final int sListPoolMaxSize缓存List实例的数量上限- 另请参阅:
-
sSetPoolMaxSize
public static final int sSetPoolMaxSize缓存Set实例的数量上限- 另请参阅:
-
sObjectPoolMaxSize
public static final int sObjectPoolMaxSize在每个LinkedList中缓存IBeetlMemoryManager.Clearable实例的数量上限- 另请参阅:
-
-
方法详细资料
-
get
获取 DefaultBeetlMemoryManager 实例- 返回:
- 进程内唯一的实例
-
takeMap
从接口复制的说明:IBeetlMemoryManager获取一个Map的实例- 指定者:
takeMap在接口中IBeetlMemoryManager- 返回:
- Map 实例,如果池中实例不够,则会创建一个
-
recoveryMap
从接口复制的说明:IBeetlMemoryManager将一个Map实例放入池中- 指定者:
recoveryMap在接口中IBeetlMemoryManager- 参数:
garbage- 应该被回收的实例- 返回:
- true 表示放入成功,false 表示放入失败
-
sizeOfMapPool
public int sizeOfMapPool()从接口复制的说明:IBeetlMemoryManager返回 Map 池中保存的 Map 实例的个数- 指定者:
sizeOfMapPool在接口中IBeetlMemoryManager- 返回:
- Map 池中实例的个数
-
takeSet
从接口复制的说明:IBeetlMemoryManager获取一个Set的实例- 指定者:
takeSet在接口中IBeetlMemoryManager- 返回:
- Set 实例,如果池中实例不够,则会创建一个
-
recoverySet
从接口复制的说明:IBeetlMemoryManager将一个Set实例放入池中- 指定者:
recoverySet在接口中IBeetlMemoryManager- 参数:
garbage- 应该被回收的实例- 返回:
- true 表示放入成功,false 表示放入失败
-
sizeOfSetPool
public int sizeOfSetPool()从接口复制的说明:IBeetlMemoryManager返回 Set 池中保存的 Set 实例的个数- 指定者:
sizeOfSetPool在接口中IBeetlMemoryManager- 返回:
- Set 池中实例的个数
-
takeList
从接口复制的说明:IBeetlMemoryManager获取一个List的实例- 指定者:
takeList在接口中IBeetlMemoryManager- 返回:
- List 实例,如果池中实例不够,则会创建一个
-
recoveryList
从接口复制的说明:IBeetlMemoryManager将一个List实例放入池中- 指定者:
recoveryList在接口中IBeetlMemoryManager- 参数:
garbage- 应该被回收的实例- 返回:
- true 表示放入成功,false 表示放入失败
-
sizeOfListPool
public int sizeOfListPool()从接口复制的说明:IBeetlMemoryManager返回 List 池中保存的 List 实例的个数- 指定者:
sizeOfListPool在接口中IBeetlMemoryManager- 返回:
- List 池中实例的个数
-
recoveryObject
public boolean recoveryObject(Class<IBeetlMemoryManager.Clearable> type, IBeetlMemoryManager.Clearable garbage) 从接口复制的说明:IBeetlMemoryManager将一个IBeetlMemoryManager.Clearable实例放入池中- 指定者:
recoveryObject在接口中IBeetlMemoryManager- 参数:
type- 类型garbage- 应该被回收的实例- 返回:
- true 表示放入成功,false 表示放入失败
-
takeObject
从接口复制的说明:IBeetlMemoryManager获取一个IBeetlMemoryManager.Clearable的实例- 指定者:
takeObject在接口中IBeetlMemoryManager- 返回:
- Clearable 实例,如果池中实例不够,则会创建一个
-
sizeOfObjectType
public int sizeOfObjectType()从接口复制的说明:IBeetlMemoryManager返回 Object 池中类型的个数- 指定者:
sizeOfObjectType在接口中IBeetlMemoryManager- 返回:
- 返回 type 的个数
-
sizeOfObjectPool
public int sizeOfObjectPool()从接口复制的说明:IBeetlMemoryManager返回 Object 池中实例的个数- 指定者:
sizeOfObjectPool在接口中IBeetlMemoryManager- 返回:
- Obejct 池中所有类型的实例数量总和
-
clearMemory
public void clearMemory()从接口复制的说明:IBeetlMemoryManager清理 ListPool SetPool MapPool 和 ObjectPool 对于 ObjectPool,会依次调用每个实例的IBeetlMemoryManager.Clearable.clear()方法- 指定者:
clearMemory在接口中IBeetlMemoryManager
-
toString
-