Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个JavaScript对象池实现中的release()函数分配了这么多内存,或者实际上分配了这么多内存?_Javascript_Memory_Memory Management_Google Chrome Devtools_Object Pooling - Fatal编程技术网

为什么这个JavaScript对象池实现中的release()函数分配了这么多内存,或者实际上分配了这么多内存?

为什么这个JavaScript对象池实现中的release()函数分配了这么多内存,或者实际上分配了这么多内存?,javascript,memory,memory-management,google-chrome-devtools,object-pooling,Javascript,Memory,Memory Management,Google Chrome Devtools,Object Pooling,我正在开发一些游戏(这里有一个:),为了在某些浏览器/设备上保持更可靠的帧速率,我正在为频繁创建的对象(如粒子)使用对象池。我每秒创建数百个,有时数千个粒子,因此从理论上讲,重用它们可以稳定内存使用,并减少由于GC暂停而导致的问题。这实际上只是移动设备上的一个问题,但无论如何 我已经编写了一个相当基本的对象池实现,它使用一个单独链接的对象列表来管理池(我希望避免由于调整数组大小而进行分配): (旁白:这看起来有点像棱角分明的1.x服务/工厂的原因是因为它过去就是这样。这背后有一个冗长乏味的故事。

我正在开发一些游戏(这里有一个:),为了在某些浏览器/设备上保持更可靠的帧速率,我正在为频繁创建的对象(如粒子)使用对象池。我每秒创建数百个,有时数千个粒子,因此从理论上讲,重用它们可以稳定内存使用,并减少由于GC暂停而导致的问题。这实际上只是移动设备上的一个问题,但无论如何

我已经编写了一个相当基本的对象池实现,它使用一个单独链接的对象列表来管理池(我希望避免由于调整数组大小而进行分配):

(旁白:这看起来有点像棱角分明的1.x服务/工厂的原因是因为它过去就是这样。这背后有一个冗长乏味的故事。)

这就是奇怪的地方。当我使用Chrome Dev工具收集分配配置文件时,它告诉我大部分内存分配发生在上面的
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;