有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Java或JavaScript中为事件侦听器创建对象池

我一直在阅读有关对象池如何减少游戏垃圾收集的文章,特别是对于不断创建和销毁关键事件的事件侦听器。他们提到了对象池将如何减少内存问题,但在代码中却没有提到如何真正做到这一点

如何在JavaScript或Java中为事件创建对象池


共 (1) 个答案

  1. # 1 楼答案

    一般来说,对于对象池,您基本上需要维护自己的可用对象列表。如果所有对象都是相同的类型,那么它可以很好地工作。如果说你有一门课,你可能会有一个东西池

    import java.util.ArrayDeque;
    import java.util.Deque;
    
    public class ThingPool {
    
        public static class Thing {
    
        }
        // start with a big stack of objects
        Deque<Thing> stack = new ArrayDeque<Thing>(1000);
        /**
         * Gets a new instance. If one exists in the stack use that,
         * otherwise create a new one.
         * @return
         */
        public Thing getThing() {
            if(stack.isEmpty())
                return new Thing();
            return stack.pop();
        }
        /**
         * Does not actually delete it, just stores it for later use
         * @param thing
         */
        public void deleteThing(Thing thing) {
            stack.push(thing);
        }
        /**
         * You may need to clear your pool at some point
         * if you have a great many objects in it 
         */
        public void clear() {
            stack.clear();
        }
    }
    

    我在C中使用了这种技术,当时我正在处理许多不同大小的矩阵,并且遇到堆碎片问题

    我没有在Java中使用它,因为Java的内存管理比C好得多