问题标签 [memory]
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.
.net - .Net 2.0 - 通用列表的效率如何?
我正在创建一个在内存中保存大量用户数据负载的应用程序,并且它主要将其全部保存在 List<T> 结构中(以及一些 Dictionary<T,T> 当我需要查找时)。
我想知道...
列表的效率如何?我为每个人获得多少内存开销?(也就是说,除了它们包含的对象之外的内存空间)每次实例化一个新对象时我要支付多少罚款?
有没有更有效的方法?
字典只是哈希表,对吗?还是它们是一种效率较低的数据结构?
我想使用数组,但我有一个典型的问题是总是从它们中添加和删除东西,所以不得不增长/缩小它们会很痛苦。
有什么想法/建议吗?
编辑:我知道我的基本数据结构 101,以及为什么链接列表更适合添加/删除,而哈希表更适合随机访问。
我最关心的是.Net 的特质。例如,每个结构浪费了多少内存。并且浪费时间初始化/杀死它们。
例如,如果实例化/GC 一个 List 需要很多时间,但清除它的时间不多,也许我应该保留一小部分 List 等待我,然后清除它们并将它们发送回池中完成后,而不是简单地取消引用它们。
或者,如果 Hashtables 访问速度更快但浪费大量内存,我可能更喜欢使用 Lists 并遍历它们,用于小项目计数。
而且我真的很想关注内存使用情况,因为我的应用程序非常耗费内存(想想 memcached 之类的)......有谁知道我在哪里可以找到这样的信息?
windows - 我可以在 Windows 机器中使用的最大 RAM 量是多少?
显然,这是 64 位窗口。
另外,单个 64 位进程可以使用的最大内存量是多少?我有点指望使用它...(是的,我知道我在做什么,请不要告诉我,如果我需要那么多 RAM,我一定做错了什么)
另外,对于 .Net 2.0 进程,这是否相同?或者.Net有下限吗?
memory - CLR Profiler - 附加到现有进程
我想在.Net 2.0上使用CLR Profiles之类的东西来查看在任何给定时间(ASP.Net工作进程的)哪些对象在堆中占用更多空间。
但是,CLR Profiler 只允许我启动一个应用程序,而不是附加到现有的应用程序。我认为这是因为它也跟踪分配和 GC,但我对此不是很感兴趣。我想要一些东西,它可以对堆的当前状态进行快照,并向我展示那里有什么,每种类型的对象有多少,以及每种对象类型总共使用了多少字节。
有任何想法吗?
c++ - 64位内存分配
我被要求在 C++ 中创建一个与 Delphi 兼容的 dll 来进行简单的 64 位内存管理。
背景是 Delphi 中的系统需要分配大量的内存块,这些内存块可以很好地超出 32 位可寻址空间。Delphi 开发人员向我解释说,他无法使用可用的 Delphi 命令分配内存。他说他可以持有一个64位的地址,所以他只想调用我提供的一个函数来分配内存并返回一个64位的指针给他。然后另一个函数稍后释放内存。
现在,我只有 VS 2008 可供我使用,所以首先我什至不确定我是否可以首先创建一个与 Delphi 兼容的 dll。
任何德尔福专家都愿意帮助我。也许有一种方法可以在不重新发明轮子的情况下实现他的要求。其他开发人员以前在 Delphi 中一定遇到过这种情况。
所有评论表示赞赏。
c - malloc()/free() 的对齐限制
我读过的较早的 K&R(第 2 版)和其他 C 语言文本讨论了动态内存分配器的实现方式,malloc()
并且free()
通常还顺便提到了一些关于数据类型对齐限制的事情。显然,某些计算机硬件架构(CPU、寄存器和内存访问)限制了您如何存储和处理某些值类型。例如,可能要求 4 字节 ( long
) 整数必须从四的倍数地址开始存储。
主要平台(英特尔和 AMD、SPARC、Alpha)对内存分配和内存访问施加了哪些限制(如果有),或者我可以安全地忽略在特定地址边界上对齐内存分配吗?
c - 如何确定 C 中数组的大小?
如何确定 C 中数组的大小?
也就是数组能容纳多少个元素?
java - 如何查找 Java 内存泄漏
如何在 Java 中找到内存泄漏(例如,使用 JHat)?我试图在 JHat 中加载堆转储以进行基本查看。但是,我不明白我应该如何找到根引用(ref)或任何它被称为的东西。基本上,我可以说有几百兆字节的哈希表条目([java.util.HashMap$Entry 或类似的东西),但地图到处都在使用......有什么方法可以搜索大地图,或者也许找到大对象树的一般根?
[编辑] 好的,到目前为止我已经阅读了答案,但我只是说我是一个便宜的混蛋(这意味着我对学习如何使用 JHat 比为 JProfiler 付费更感兴趣)。此外,JHat 始终可用,因为它是 JDK 的一部分。当然,除非 JHat 除了蛮力之外别无他法,但我不敢相信会是这样。
此外,我认为我无法实际修改(添加所有地图大小的日志记录)并运行它足够长的时间让我注意到泄漏。
linux - 在 32 位操作系统上在内存中存储超过 3GB 的视频帧
在工作中,我们有一个应用程序可以播放 2K (2048*1556px) OpenEXR 电影序列。它运行良好.. 除了超过 3GB 的序列(很常见)之外,它必须从内存中卸载旧帧,尽管事实上所有机器都有 8-16GB 内存(可通过 linux BIGMEM 东西寻址)。
这些帧必须缓存到内存中才能实时播放。该操作系统是使用了几年的 32 位 Fedora Distro(在可预见的未来无法升级到 64 位)。每个进程的限制是每个进程 3GB。
基本上,是否有可能以某种方式在内存中缓存超过 3GB 的数据?我最初的想法是在多个进程之间传播数据,但我不知道这是否可能......
java - 如何在 Java 中监控计算机的 CPU、内存和磁盘使用情况?
我想在 Java 中监控以下系统信息:
- 当前 CPU 使用率**(百分比)
- 可用内存*(可用/总计)
可用磁盘空间(可用/总)
*请注意,我指的是整个系统可用的总内存,而不仅仅是 JVM。
我正在寻找一种不依赖我自己的代码调用外部程序或使用 JNI 的跨平台解决方案(Linux、Mac 和 Windows)。尽管这些都是可行的选择,但如果有人已经有了更好的解决方案,我不希望自己维护特定于操作系统的代码。
如果有一个免费的库以可靠的跨平台方式执行此操作,那就太好了(即使它进行外部调用或使用本机代码本身)。
任何建议都非常感谢。
为了澄清,我想获得整个系统的当前 CPU 使用率,而不仅仅是 Java 进程。
SIGAR API 在一个包中提供了我正在寻找的所有功能,因此它是迄今为止我问题的最佳答案。但是,由于它是在 GPL 下获得许可的,我不能将它用于我的原始目的(封闭源代码的商业产品)。Hyperic 可能会许可 SIGAR 用于商业用途,但我没有调查过。对于我的 GPL 项目,我以后肯定会考虑 SIGAR。
对于我目前的需求,我倾向于以下内容:
- 对于 CPU 使用率,
OperatingSystemMXBean.getSystemLoadAverage() / OperatingSystemMXBean.getAvailableProcessors()
(每个 cpu 的平均负载) - 为了记忆,
OperatingSystemMXBean.getTotalPhysicalMemorySize()
和OperatingSystemMXBean.getFreePhysicalMemorySize()
- 对于磁盘空间,
File.getTotalSpace()
以及File.getUsableSpace()
限制:
和getSystemLoadAverage()
磁盘空间查询方法仅在 Java 6 下可用。此外,某些 JMX 功能可能不适用于所有平台(即据报道getSystemLoadAverage()
在 Windows 上返回 -1)。
虽然最初是在 GPL 下许可的,但它已更改为Apache 2.0,它通常可用于封闭源代码的商业产品。
c++ - 什么是跳台?
有人可以解释跳转表的机制吗?为什么嵌入式系统需要?