【发布时间】:2014-09-25 09:48:44
【问题描述】:
我正在创建一个实现某种缓存的程序。我需要使用尽可能多的内存,为此我需要做两件事:
- 检查系统中仍有多少可用内存(仅限 RAM,而非 SWAP)
- 检查我的应用已经使用了多少内存。
我需要一个独立于平台的解决方案(Linux、Windows 等)。
使用这两条信息,我将减小或放大缓存的大小。 如何在 Haskell 中获取这些信息?有没有可以提供这些信息的软件包?
【问题讨论】:
-
"检查系统中还有多少内存可用"。这个问题没有多大意义。您有一个可以增长到 2TB 的交换文件。所有这些内存都“可用”吗?如果你把它全部占用,你的系统就会停止运转。也许您想检查物理内存。但是,如果您在浏览器中打开了 300 个标签,而这些标签都在一周内未动过呢?它们随时可以被换掉,但它们现在占用了 99.5% 的物理内存,所以你根本没有“可用”的东西。
-
@n.m.我认为很明显,要实现缓存,我需要 RAM 中的可用空间量,而不是 SWAP 中的可用空间。构建一个可以进行系统交换的缓存并不是一个好主意。 ;p
-
为什么不让用户指定缓存大小呢?他们可能不想要一个自动使用所有 RAM 的程序。
-
@remdezx 我同意这里的 n-m。在我的机器(Mac)上,你可能一直得到零或几乎为零的可用 RAM。我已经好几周没有关闭它了,也好几个月没有关闭应用程序(如果我重新启动,mac 重新加载,登录时,所有在我注销/关闭时打开的应用程序)。所有 8GB 的内存总是被完全使用(特别是如果你包括磁盘缓存)。内存按需分配/释放。延迟(非活动)应用程序使用的内存首先被压缩,然后最终按需交换。只需使用合理的尺寸(也许可以配置)。
-
扩展@AnalogFile 评论:OS X 的 RAM 分为空闲、有线、活动和非活动内存。详情在这里:support.apple.com/kb/ht1342。短版:free 是免费的,inactive 是没有尽可能长时间删除的剩余部分(为了更快地启动应用程序),active 由当前正在运行的程序使用,wired 是 OS X 保留的。
标签: haskell caching memory memory-management resources