为什么这个JavaScript对象池实现中的release()函数分配了这么多内存,或者实际上分配了这么多内存?
我正在开发一些游戏(这里有一个:),为了在某些浏览器/设备上保持更可靠的帧速率,我正在为频繁创建的对象(如粒子)使用对象池。我每秒创建数百个,有时数千个粒子,因此从理论上讲,重用它们可以稳定内存使用,并减少由于GC暂停而导致的问题。这实际上只是移动设备上的一个问题,但无论如何 我已经编写了一个相当基本的对象池实现,它使用一个单独链接的对象列表来管理池(我希望避免由于调整数组大小而进行分配): (旁白:这看起来有点像棱角分明的1.x服务/工厂的原因是因为它过去就是这样。这背后有一个冗长乏味的故事。) 这就是奇怪的地方。当我使用Chrome Dev工具收集分配配置文件时,它告诉我大部分内存分配发生在上面的为什么这个JavaScript对象池实现中的release()函数分配了这么多内存,或者实际上分配了这么多内存?,javascript,memory,memory-management,google-chrome-devtools,object-pooling,Javascript,Memory,Memory Management,Google Chrome Devtools,Object Pooling,我正在开发一些游戏(这里有一个:),为了在某些浏览器/设备上保持更可靠的帧速率,我正在为频繁创建的对象(如粒子)使用对象池。我每秒创建数百个,有时数千个粒子,因此从理论上讲,重用它们可以稳定内存使用,并减少由于GC暂停而导致的问题。这实际上只是移动设备上的一个问题,但无论如何 我已经编写了一个相当基本的对象池实现,它使用一个单独链接的对象列表来管理池(我希望避免由于调整数组大小而进行分配): (旁白:这看起来有点像棱角分明的1.x服务/工厂的原因是因为它过去就是这样。这背后有一个冗长乏味的故事。
release(object)
函数中。如果我在收集个人资料时玩游戏一两分钟,我会看到在这个函数中分配了几个MB,但我不明白为什么
但是,如果我注释掉以下代码行,内存分配将消失,并且不会重新出现在配置文件中的任何其他位置:
// Commenting out these two lines of code causes allocation to disappear
// object.__next = nextObjectToUse;
// nextObjectToUse = object;
问题是,为什么
基本上,这些行所做的“所有”都是一些指针杂耍,将一个对象添加到列表的头部。我盯着这个,并假设我做了一些愚蠢的事情:例如,我想知道我是否在某种程度上把杂耍搞错了(或者同样地,我是否在create()
函数中把杂耍搞错了),但我不太明白怎么做
这里有人知道为什么会有这么多内存分配吗
(这是OSX上的Chrome 58,顺便说一句)
谢谢
巴特
// Commenting out these two lines of code causes allocation to disappear
// object.__next = nextObjectToUse;
// nextObjectToUse = object;