类 DefaultBeetlMemoryManager

java.lang.Object
org.beetl.core.impl.DefaultBeetlMemoryManager
所有已实现的接口:
IBeetlMemoryManager

public class DefaultBeetlMemoryManager extends Object implements 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);
         }
     }