在我目前正在使用的系统中,有一个将大量数据加载到数组中进行sorting/聚合/处理的过程。 我知道这个过程需要对内存使用进行优化,但在短期内只需要工作。 鉴于加载到数组中的数据量,我们保持达到内存限制。 它已经增加了好几次了,我想知道有没有增加它通常是一个坏主意的一个点? 还是仅仅是机器有多lessRAM? 机器有2GB的内存,memory_limit目前设置为1.5GB。 我们可以很容易地将更多的内存添加到机器上(无论如何)。 有没有人遇到过这种问题? 以及解决scheme是什么?
在阅读了这篇测量几种对象types的内存消耗的旧文章之后,我很惊讶地看到在Java中使用了多less内存String : length: 0, {class java.lang.String} size = 40 bytes length: 7, {class java.lang.String} size = 56 bytes 虽然文章有一些技巧,以尽量减less这一点,我没有发现他们完全满意。 使用char[]存储数据似乎是浪费。 大多数西方语言的明显改进是使用byte[]和UTF-8编码,因为只需要一个字节来存储最常见的字符,而不是两个字节。 当然可以使用String.getBytes("UTF-8")和new String(bytes, "UTF-8") 。 即使String实例本身的开销也不见了。 但是,那么你失去了非常方便的方法,如equals() , hashCode() , length() ,… 据我所知,Sun在Strings的byte[]表示方面拥有专利 。 用于在Java编程环境中高效地表示string对象的框架 …这些技术可以实现创buildJavastring对象为适当的单字节字符数组… 但是我没有find该专利的API。 为什么我在乎 在大多数情况下,我不这样做。 但是我使用了大量caching的应用程序,包含大量的string,这些string可以更有效地使用内存。 有人知道这样的API吗? 还是有另一种方法来保持您的内存占用string很小,即使在CPU性能或更丑陋的API的代价? 请不要重复上述文章的build议: 自己的String.intern()的变体(可能与SoftReferences ) 存储一个char[]并利用当前的String.subString(.)实现来避免数据复制(讨厌的) 更新 我运行了Sun当前JVM(1.6.0_10)的文章中的代码。 它取得了与2002年相同的结果。
我想格式化我的Logger输出,以包括当前的内存使用情况,作为一个长期运行的过程的一部分。 有没有什么内置的Ruby为此,有点像PHP的memory_get_usage() ? 或者我必须执行一些shell命令从ps ?
我的问题是:如何读取python中的内存地址的内容? 例如:ptr = id(7)我想读取由ptr指向的内存的内容。 谢谢。