问题标签 [memory-efficient]

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 投票
3 回答
327 浏览

java - 理论上Java中的“结构”数组是否可行?

在某些情况下,需要高效的内存来存储大量对象。要在 Java 中做到这一点,您必须使用几个原始数组(见下文为什么)或一个大字节数组,这会产生一点 CPU 开销来进行转换。

示例:您有一个class Point { float x; float y;}. 现在,您想将 N 个点存储在一个数组中,在 32 位 JVM 上,该数组至少需要 N * 8 个字节用于浮点数和 N * 4 个字节用于引用。所以至少 1/3 是垃圾(这里不计入普通对象开销)。但是,如果您将其存储在两个浮点数组中,一切都会好起来的。

我的问题:为什么 Java 不优化引用数组的内存使用?我的意思是为什么不像在 C++ 中那样直接将对象嵌入到数组中?

例如,标记类 Point final 应该足以让 JVM 看到 Point 类的数据的最大长度。或者这会违反规范吗?在处理大型 n 维矩阵等时,这也会节省大量内存

更新

我想知道 JVM 理论上是否可以优化它(例如在幕后)以及在什么条件下 - 我不能以某种方式强制 JVM。我认为结论的第二点是它不能轻易完成的原因。

结论 JVM 需要知道的内容:

  1. 该类需要是 final 才能让 JVM 猜测一个数组条目的长度
  2. 该数组需要只读。当然,您可以更改值,Point p = arr[i]; p.setX(i)但不能通过inlineArr[i] = new Point(). 否则 JVM 将不得不引入与“Java 方式”相反的复制语义。见阿罗斯的回答
  3. 如何初始化数组(调用默认构造函数或将成员初始化为其默认值)
0 投票
2 回答
143 浏览

objective-c - 在 Objective-C 中创建内存高效的对象

假设我有一个只有姓名和照片的联系人对象

进一步假设我住在一个有 1000 个人叫 Sam 的地方,他们都是克隆人,所以他们的照片看起来完全一样,我决定作弊并为所有人使用同一张照片。

Objective C 是否足够聪明,以至于当获取姓名和照片的副本时,它会识别出它具有相同的值,并且可以由一个对象处理并为所有 Sam 分配一个 NSString 和一个 UIImage 吗?

处理这个问题的正确方法是什么?显然,我确实需要让它们复制属性以处理非 Sam 案例,以防我收到传递的可变字符串和图像。

0 投票
3 回答
586 浏览

jquery - jQuery 选择器效率

我有一个快速的 Bing 并且无法真正找到答案。

如果我有一段使用$('something here')150 次的代码,是否会更有效:

我知道非常愚蠢的问题,但它会更有效,因为 jQuery 只需要找到一次该项目吗?

0 投票
1 回答
5539 浏览

bit-shift - 使用位移求整数平方根的最快方法是什么?

我正在寻找计算数字(整数)平方根(整数)的最快方法。我在维基百科中遇到了这个解决方案,它找到一个数字的平方根(如果它是一个完美的平方)或它最近的下完美平方的平方根(如果给定的数字不是一个完美的平方:

我尝试了很多测试运行来跟踪算法,但我似乎不理解里面的部分while(bit!=0)。有人可以向我解释这部分吗?

0 投票
2 回答
237 浏览

javascript - 不会崩溃浏览器的高效 Javascript 组合功能

我有一个程序,它涉及以下函数,用于计算给定数组的所有可能组合:

例如:

返回:

我在我的程序中经常使用它,特别是带有 12 个对象的数组参数,以从该数组返回两个对象的所有可能组合。有 66 种可能的组合。在我的程序中,我需要经常检查此函数返回的数组的对象元素的属性值,对它们进行比较,对它们运行条件等。但是当我调用使用这样的组合函数的函数时,浏览器会崩溃( firefox 返回消息:“此页面上的脚本可能正忙,或者可能已停止响应。您可以立即停止脚本,在调试器中打开脚本,或者让脚本继续。”)它始终是上面的组合函数被调用,它崩溃了。

我发现了这个:http ://www.nczonline.net/blog/2009/01/13/speed-up-your-javascript-part-1/ 这是提高调用代码效率的好方法重复函数(例如在组合函数中)。

如何有效地将组合功能与 ncsonline 的方法集成以阻止浏览器崩溃?

0 投票
1 回答
178 浏览

algorithm - 给定通过图的路径列表,有效地找到使用每条边的路径

我有一个图表和这个图表中的路径列表。对于每条边e,我需要找到使用的路径e,然后根据这些路径做一些其他的工作。图的大小和对内存使用的限制使得我不能只遍历所有构建集合数组的路径一次,其中 seti包含使用 edge 的路径i

可行的蛮力方法是:

如何在保持内存效率的同时获得更好的时间效率?

0 投票
1 回答
161 浏览

perl - 我应该重新使用单个 HTML::SimpleLinkExtor 对象来提高内存效率吗?

所以这似乎是一个愚蠢的问题,但我正在构建一个内存资源非常有限的应用程序,所以我需要尽可能谨慎地使用内存。所以我的问题是,以下哪个更节省内存?

或者

因此,第一次它每次都会创建一个新的 HTML::SimleLinkExtor 对象,而第二次它只是重置同一个对象以再次使用。所以在我看来,第二个内存效率更高,但老实说,我真的不知道 perl 将内存释放回操作系统有多好,或者它是否会保留一些内存HTML::SimpleLinkExtor 对象即使超出范围也是如此。谢谢您的帮助!

0 投票
3 回答
5213 浏览

android - android中的高效ListView

构建ListView使用最少内存的最佳方法是什么?这很重要,因为我遇到了一些实现,当我在低端设备上滚动时,它们中的大多数都是滞后的ListView,但是我看到了一些应用程序,即使在低端设备上滚动也非常流畅。如何做呢?从内存使用的角度来看,构造这样一个最有效的方法是ListView什么?

0 投票
2 回答
1320 浏览

c++ - 每次我需要时将整个文件从磁盘复制到内存以处理或读取文件中的数据,直到文件全部读取

我正在做一些非常关心效率的事情。文件数以千计,每个文件最大300M。每个文件至少包含 50 万个项目。我的工作是尽可能快地处理每个项目。物理内存大小不是问题。所以。我会从将整个文件复制到内存中并从内存中获取每个项目而不是从磁盘中获取每个项目中受益吗?还有其他方法可以节省 IO 过程的时间吗?谢谢!

0 投票
3 回答
165 浏览

php - 我刚刚在 PHP 中编写了一个随机数生成器,您认为这可以如何改进?

我正在为一个客户工作,他希望生成格式为 [char][int][int] 的代码,如 T56、N78、J89 等...... char 必须为大写。

作为一个快速的人,我写了这个函数,因为我发现它最简单

但我一直在想,还会有许多其他有效的解决方案。上面这个只是工作,但我更注重效率,因为我需要生成大量这样的代码。

有什么更好的起点!