草庐IT

memory-efficient

全部标签

memory - 如何使用页表将虚拟地址转换为物理地址?

假设我有一个普通的页表:页表(页面大小=4k)Page#:0123456789101112131415PageFrame#:3x1x0x2x5x746xxx如何将任意逻辑地址(如51996)转换为物理内存地址?如果我取对数基数2(4096),我得到12。我想这就是我想用于地址偏移量的位数。我只是不确定。51996/4096=12.69。那么这是否意味着它位于第12页并具有一定的偏移量?然后如何将其转换为“51996”的物理地址? 最佳答案 要确定给定内存地址的页,请取前P位(N位的)个数。P=lg2(numberOfPages)在您

java - 制作一个 "memory dump"的java应用程序?

我有Java应用程序,不幸的是,它在一段时间后开始消耗大量内存。更复杂的是,它不仅是Java应用程序,也是JavaFX2应用程序。我怀疑存在一些内存泄漏,甚至可能在底层JavaFX调用和native库中。理想的解决方案是在某个时刻获取所有java对象的转储(连同它们的内存使用情况),然后分析该转储。有什么方法可以实现吗? 最佳答案 使用jmap-heap:format=b创建堆的二进制转储,然后可以将其加载到多个工具中-我最喜欢的是“EclipseMemoryAnalyzer” 关于ja

memory - 用有限的内存排序

假设我有XGB的可用RAM空间,我需要对大量数据进行排序(所有可用内存要大得多。它存储在硬盘上)。能否给个提示,如何实现? 最佳答案 您正在寻找外部排序。这些场景中最大的开销往往是磁盘IO。所以诀窍是使用最小化磁盘IO的算法。通常的方法是将适当大的block读取到内存中,对这些block进行排序,将它们保存回磁盘,然后合并排序的block。搜索“外部排序”或“排序合并”以及您选择的技术应该会得到一些不错的结果。 关于memory-用有限的内存排序,我们在StackOverflow上找到一

memory - Unix : sharing already-mapped memory between processes

我有一个预先构建的用户空间库,其中有一个API类似于voidgetBuffer(void**ppBuf,unsignedlong*pSize);voidbufferFilled(void*pBuf,unsignedlongsize);这个想法是我的代码从库中请求一个缓冲区,用东西填充它,然后将其交还给库。我希望另一个进程能够填充此缓冲区。我可以通过shm*/shm_*API创建一些新的共享缓冲区来做到这一点,让其他进程填充它,然后将其复制到lib本地进程中的lib缓冲区,但这会产生额外的开销(可能很大)复制。有没有办法共享已经为进程映射的内存?例如:[locallibprocess]g

memory - RabbitMQ + 内存限制

我只是在查看RabbitMQ的配置细节并遇到了[{rabbit,[{vm_memory_high_watermark,0},{disk_free_limit,{mem_relative,1.0}}]}]这个配置是什么意思?vm_memory_high_watermark设置为0表示=>在rabbitmq应用程序启动时立即阻止所有发布者?但是我们仍然看到rabbitmq能够将我们发送的任何消息排队。16720rabbitmq200142m62m2408S0**1.6**0:06.88beam.smp每当我们向代理发送消息时,我们都会看到此进程的内存使用量增加。那么,这是否意味着尽管水印设

安卓模拟器 : Easy way to simulate a process restart due to low memory?

正如我刚刚了解到的,Android保留随时终止后台应用程序进程以回收RAM的权利。应用程序仍在运行并且可以继续运行,但是我的所有静态变量都已消失(参见this文章)。我想模拟我的应用在这种情况下的行为。最简单的方法是什么?肯定有比编写一些分配大量内存的附加应用程序更容易和更可预测的方法。 最佳答案 找到两个类似的问题Simulatekillingofactivityinemulator和Simulatelowbattery&lowmemoryinAndroid.这些问题的解决方案:使用adbshell然后kill来自ps的带有PID

Git 克隆因内存不足错误而失败 - "fatal: out of memory, malloc failed (tried to allocate 905574791 bytes)/fatal: index-pack failed"

我正在尝试将大型(1.4GB)Git存储库克隆到具有384MBRAM的32位DebianVM。我正在使用Git1.7.2.5,并使用SSH协议(protocol)进行克隆('gitcloneuser@host.com:/my/repo')克隆失败并显示以下消息:remote:Countingobjects:18797,done.remote:warning:subobtimalpack-outofmemoryremote:Compressingobjects:100%(10363/10363),done.fatal:outofmemory,mallocfailed(triedtoall

memory - AppDomain 的 CPU 和内存上限

我想在appdomain中托管一个exe,并为其分配CPU和内存上限,这样它就不会使用超过分配的处理能力。这可能吗?如何做? 最佳答案 据我所知,您不能直接限制最大内存。但是,从.NET4开始,当前由AppDomain分配的内存在AppDomain.MonitoringSurvivedMemorySize中可用。属性ifAppDomain.MonitoringIsEnabled设置为true。您可以启动一个看门狗线程来监控分配情况。 关于memory-AppDomain的CPU和内存上限

memory - 我可以从 WinDbg 运行 .NET 垃圾收集吗?

我正在研究为什么托管进程使用大量内存。有没有办法从WinDbg运行GC.Collect(3),这样我就可以专注于实际的内存分配? 最佳答案 我认为没有任何方法可以从WinDbg运行.NET垃圾收集,但我也认为没有必要。见RicoMariani'sPerformanceTidbits-Trackingdownmanagedmemoryleaks(howtofindaGCleak)了解有关找出堆中的内容的信息。其他可能有用的链接:WhentocallGC.Collect()ScottDorman-.NETMemoryManagement

memory - 即使在清除所有回滚历史后,tmux 仍使用 1G RAM

我在ubuntu14.04上使用tmux(实际上是带有tmux后端的byobu)。我的tmux使用1GB内存(top中的VIRT和RES)并且我已经使用了clear-history命令。现在我的回滚消失了,但内存使用量并没有下降。这个tmux运行了很长时间,并且滚动了很多文本。top显示它总共使用了超过1小时的CPU时间。可能是什么原因?会不会有内存泄漏?我可以尝试什么?我无法重新启动它或做危险的事情,因为session运行的实验需要大约一周才能完成... 最佳答案 tmux中似乎存在一个错误,导致在清除历史记录时没有释放内存。此错