public class DefaultBeetlMemoryManager extends Object implements IBeetlMemoryManager
// 以下例子演示了如何通过 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);
}
}
IBeetlMemoryManager.Clearable| 限定符和类型 | 字段和说明 |
|---|---|
static int |
sListPoolMaxSize
缓存
List 实例的数量上限 |
static int |
sMapPoolMaxSize
缓存
Map 实例的数量上限 |
static int |
sObjectPoolMaxSize
在每个LinkedList中缓存
Clearable 实例的数量上限 |
static int |
sSetPoolMaxSize
缓存
Set 实例的数量上限 |
| 限定符和类型 | 方法和说明 |
|---|---|
void |
clearMemory()
清理 ListPool SetPool MapPool 和 ObjectPool
对于 ObjectPool,会依次调用每个实例的
IBeetlMemoryManager.Clearable.clear() 方法 |
static IBeetlMemoryManager |
get()
获取 DefaultBeetlMemoryManager 实例
|
boolean |
recoveryList(List garbage)
将一个
List 实例放入池中 |
boolean |
recoveryMap(Map garbage)
将一个
Map 实例放入池中 |
boolean |
recoveryObject(Class<IBeetlMemoryManager.Clearable> type,
IBeetlMemoryManager.Clearable garbage)
将一个
IBeetlMemoryManager.Clearable 实例放入池中 |
boolean |
recoverySet(Set garbage)
将一个
Set 实例放入池中 |
int |
sizeOfListPool()
返回 List 池中保存的 List 实例的个数
|
int |
sizeOfMapPool()
返回 Map 池中保存的 Map 实例的个数
|
int |
sizeOfObjectPool()
返回 Object 池中实例的个数
|
int |
sizeOfObjectType()
返回 Object 池中类型的个数
|
int |
sizeOfSetPool()
返回 Set 池中保存的 Set 实例的个数
|
List |
takeList()
获取一个
List 的实例 |
Map |
takeMap()
获取一个
Map 的实例 |
IBeetlMemoryManager.Clearable |
takeObject(Class<IBeetlMemoryManager.Clearable> type)
获取一个
IBeetlMemoryManager.Clearable 的实例 |
Set |
takeSet()
获取一个
Set 的实例 |
String |
toString() |
public static final int sObjectPoolMaxSize
Clearable 实例的数量上限public static IBeetlMemoryManager get()
public Map takeMap()
IBeetlMemoryManagerMap 的实例takeMap 在接口中 IBeetlMemoryManagerpublic boolean recoveryMap(Map garbage)
IBeetlMemoryManagerMap 实例放入池中recoveryMap 在接口中 IBeetlMemoryManagergarbage - 应该被回收的实例public int sizeOfMapPool()
IBeetlMemoryManagersizeOfMapPool 在接口中 IBeetlMemoryManagerpublic Set takeSet()
IBeetlMemoryManagerSet 的实例takeSet 在接口中 IBeetlMemoryManagerpublic boolean recoverySet(Set garbage)
IBeetlMemoryManagerSet 实例放入池中recoverySet 在接口中 IBeetlMemoryManagergarbage - 应该被回收的实例public int sizeOfSetPool()
IBeetlMemoryManagersizeOfSetPool 在接口中 IBeetlMemoryManagerpublic List takeList()
IBeetlMemoryManagerList 的实例takeList 在接口中 IBeetlMemoryManagerpublic boolean recoveryList(List garbage)
IBeetlMemoryManagerList 实例放入池中recoveryList 在接口中 IBeetlMemoryManagergarbage - 应该被回收的实例public int sizeOfListPool()
IBeetlMemoryManagersizeOfListPool 在接口中 IBeetlMemoryManagerpublic boolean recoveryObject(Class<IBeetlMemoryManager.Clearable> type, IBeetlMemoryManager.Clearable garbage)
IBeetlMemoryManagerIBeetlMemoryManager.Clearable 实例放入池中recoveryObject 在接口中 IBeetlMemoryManagertype - 类型garbage - 应该被回收的实例public IBeetlMemoryManager.Clearable takeObject(Class<IBeetlMemoryManager.Clearable> type)
IBeetlMemoryManagerIBeetlMemoryManager.Clearable 的实例takeObject 在接口中 IBeetlMemoryManagerpublic int sizeOfObjectType()
IBeetlMemoryManagersizeOfObjectType 在接口中 IBeetlMemoryManagerpublic int sizeOfObjectPool()
IBeetlMemoryManagersizeOfObjectPool 在接口中 IBeetlMemoryManagerpublic void clearMemory()
IBeetlMemoryManagerIBeetlMemoryManager.Clearable.clear() 方法clearMemory 在接口中 IBeetlMemoryManagerCopyright © 2021. All rights reserved.