问题标签 [memory-optimization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
201 浏览

php - 在 php 脚本中释放内存

我已经为我正在做的一个项目编写了我的 php 脚本。我的下一步是我想看看我是否可以从内存的角度改进我的代码,因为我的一些脚本会占用大量内存。我一直在对此进行研究,一个建议是 NULL 和未设置变量,但我从未见过这样做的例子。因此,我想举一个在我的脚本中完成的常见操作的示例,并想知道这是否是正确的做法:

那是释放内存的正确方法吗?我读过 PHP 中的垃圾收集可能很懒惰,所以他们建议将值设为 NULL,因为它会立即缩小它。

我知道这对于这个网站来说可能太模糊了,但是如果有人可以让我知道这是否是释放内存的正确方法?或者,如果有不同的方法,您能否提供一个示例,以便我可以直观地看到它是如何工作的。提前致谢!

0 投票
1 回答
1388 浏览

java - 哈希映射与字符串键的 Redis 内存优化

我一直在尝试在两种情况下评估 redis 的内存大小。

场景一:

在这种情况下,大小为 892 字节

场景二:

在这种情况下,它需要 925 个字节。

从 Redis 2.2 开始,许多数据类型都进行了优化,以在达到一定大小时使用更少的空间。哈希、列表、仅由整数组成的集合和排序集,当小于给定的元素数量并且达到最大元素大小时,以非常节省内存的方式编码,使用的内存减少多达 10 倍(5使用更少的内存是平均节省)。

我已经尝试过这种优化,但我还没有实现。配置为默认配置。可能出了什么问题?

已编辑

场景一

在场景 1 中,info1 中已用内存为“used_memory:844640”,info2 中已用内存为“used_memory:852176”。因此,info2 和 info1 之间的差异是 7536 字节。

情景二

在场景 2 中,info1 中已用内存为“used_memory:845576”,info2 中已用内存为“used_memory:847208”。因此,info2 和 info1 之间的差异是 1632 字节。

我的评估是否正确?

0 投票
1 回答
59 浏览

c++ - 我可以强制 C++ 类使用最少的空间进行编译吗?

我有一个类,我会从字面上实例化数十亿个。我尽我最大的努力在其中放入尽可能少的数据,并且在为 x64 架构编译时将其减少到 10 个字节:anunsigned short intsize_t. 但是,当我将鼠标悬停在sizeof(myclass)(在 VS 中)时,它会报告 16 个字节。如果我注释掉任何一个字段,那么类的大小就是您所期望的,分别为 10 个字节和 2 个字节。

有没有办法指示编译器只为我的类使用 10 个字节?

0 投票
2 回答
651 浏览

java - 可以满足我的目的的最节省内存的数据结构是什么?

我正在尝试对不断运行 OOM 的服务器进行内存优化。

服务器中的大多数对象(按计数)采用以下形式:

  • 每个对象都是一个HashMap
  • HashMap 键是字符串
  • HashMap 值是 Attribute 类的对象,它只有一个 int 和 2 个布尔值。

重要的警告:95% 的此类哈希图永远只有一个键;我知道创建哈希图时是否是这种情况。

有数百万个这样的哈希图。

我已经问了一个关于优化这些哈希映射内存的单独问题,并且有人在评论中建议重新设计我的整个数据结构可能会更好,因为即使初始大小为“1”哈希映射仍然占用额外的内存。

因此,我的问题是;有没有更好的 Java 数据结构可以实现,它可以以更好的内存效率存储相同的确切数据?

注意:我需要能够查找特定值是否作为键存在;因此我考虑过但拒绝将数据存储在 [string_value, int, boolean, boolean] 的五元组列表中。

0 投票
1 回答
2242 浏览

php - Foreach() 和 each() 内存不足,分块不起作用

我正在编写一个工匠控制台命令,该命令循环遍历表中的所有记录并在该表上重新生成一个字段。

该字段是 ahash并且是作为md5()特定字符串的 an 生成的。

最初我的代码如下所示:

在达到 28,000 条记录中的大约 10,000 条后,它会因内存耗尽错误而死:

PHP致命错误:允许的内存大小为268435456字节已用尽(试图分配4096字节)

我认为chunk这可能会有所帮助:

但是我仍然遇到内存耗尽错误。

如何在不增加内存限制的情况下遍历所有这些记录并实现我的目标?

0 投票
1 回答
97 浏览

c++ - 如果我提前将参数声明为变量而不是将它们写入函数调用的行内,它有什么区别(在内存方面)?

例如,对于 dummy function write(int length, const char* text){...},这两种方法在内存方面有什么区别吗?

或者

奖励:如果有一些重复怎么办?即循环使用一个数组重复调用该函数,该数组的元素是预期的参数。

我问这个问题,特别是奖金,希望更好地了解每个人如何消耗内存以优化我在 Arduino 等内存敏感平台上编写时的效率。也就是说,如果您知道更有效的方法,请分享!谢谢!

0 投票
2 回答
113 浏览

c - 如何在不到 2 个字节的时间内编码 16 个数字的列表

我需要在一个变量中传达 16 个项目的可用性信息,它们的 id(0-15)。

我可以用 2 个字节对其进行编码,其中每个位都映射到一个项目 id,其中1表示可用和0表示不可用 For ex0000100010001000 这个数字包含具有 id 4812的项目可用的信息

我需要使用少于 2 个字节对这些信息进行编码。

这可能吗?如果是这样,怎么做?

0 投票
2 回答
4518 浏览

string - Go 中的垃圾收集和指针的正确使用

我来自 Python/Ruby/JavaScript 背景。我了解指针的工作原理,但是,我不完全确定如何在以下情况下利用它们。

假设我们有一个虚构的 Web API,它搜索一些图像数据库并返回一个 JSON 描述在找到的每个图像中显示的内容:

我的目标是在 Go 中创建一个数据结构,它将每个标签映射到一个图像 URL 列表,如下所示:

如您所见,每个图像 URL 可以同时属于多个标签。如果我有数千张图像甚至更多标签,如果图像 URL 字符串按每个标签的值复制,则此数据结构可能会变得非常大。这是我想利用指针的地方。

我可以用 Go 中的两个结构来表示 JSON API 响应,func searchImages()模仿假 API:

现在,导致内存中数据结构非常大的次优映射函数可能如下所示:

我可以修改它以使用指向Image结构URL字段的指针,而不是按值复制它:

它有效,我的第一个问题是result在我以这种方式构建映射后数据结构会发生什么?字符串字段会Image URL以某种方式留在内存中,其余的result将被垃圾收集吗?或者result数据结构是否会因为某些东西指向它的成员而保留在内存中直到程序结束?

另一种方法是将 URL 复制到中间变量并使用指向它的指针:

这是否更好?数据结构会result被正确地垃圾收集吗?

或者也许我应该在结构中使用指向字符串的指针Image

有一个更好的方法吗?我也很感激 Go 上的任何资源,这些资源深入描述了指针的各种用途。谢谢!

https://play.golang.org/p/VcKWUYLIpH7

更新:我担心最佳的内存消耗并且不会产生最不需要的垃圾。我的目标是尽可能使用最少的内存。

0 投票
0 回答
52 浏览

python - 优化训练 gru 中的 ram 使用

gru下面的代码是用于在 python 2.7中训练 a 的嵌套循环;但它是一个消耗内存的。feats_tensor并且dec_padded_text对象太大并且同时加载它们使我面临内存不足错误。知道如何优化此代码以使用 ram 吗?

0 投票
1 回答
50 浏览

sql-server - 如何将普通表上的现有索引移动到内存优化文件组?

如何将普通表上的现有索引移动到 sql server 中的内存优化文件组?