Tag: 内存

Linux中的缓冲区和高速caching之间有什么区别?

对我来说,并不清楚两个Linux内存概念之间的区别: buffer和cache 。 我已经阅读了这篇文章 ,在我看来,他们之间的差异是到期政策: 缓冲区的政策是先入先出 caching的策略是最近最less使用的。 我对吗? 特别是,我正在看两个命令: free和vmstat james@utopia:~$ vmstat -SM procs ———–memory———- —swap– —–io—- -system– —-cpu—- rb swpd free buff cache si so bi bo in cs us sy id wa 5 0 0 173 67 912 0 0 19 59 75 1087 24 4 71 1 james@utopia:~$ free -m total used […]

斯卡拉与Java,性能和内存?

我热衷于研究Scala,并有一个基本的问题,我似乎找不到答案:一般来说,Scala和Java之间的内存在性能和使用方面有差异吗?

如何在内存中获取对象大小?

我需要知道我的对象在内存中消耗了多less字节(在C#中)。 例如我的Hashtable , SortedList或List<String>多less。

为什么这种记忆食物真的没有记忆?

我想创build一个程序来模拟Unix服务器上的内存不足(OOM)情况。 我创造了这个超级简单的记忆食器: #include <stdio.h> #include <stdlib.h> unsigned long long memory_to_eat = 1024 * 50000; size_t eaten_memory = 0; void *memory = NULL; int eat_kilobyte() { memory = realloc(memory, (eaten_memory * 1024) + 1024); if (memory == NULL) { // realloc failed here – we probably can't allocate more memory for whatever reason return 1; } […]

计算机程序运行时会发生什么?

我知道一般的理论,但我不能适应细节。 我知道一个程序驻留在电脑的辅助存储器中。 一旦程序开始执行,它就完全复制到RAM中。 然后,处理器一次性检索几条指令(取决于总线的大小),将它们放入寄存器并执行。 我也知道一个计算机程序使用两种内存:堆栈和堆,它们也是计算机主内存的一部分。 该堆栈用于非dynamic内存,dynamic内存堆(例如,与C ++中的new运算符相关的所有内容) 我不明白的是这两件事情是如何连接的。 用于执行指令的堆栈在什么位置? 指令从RAM到堆栈,到寄存器?

为什么追加“”到string保存内存?

我用了一个有很多数据的variables,比如String data 。 我想用下面的方式使用这个string的一小部分: this.smallpart = data.substring(12,18); 经过几个小时的debugging(使用内存可视化工具)后,我发现objects field smallpart记住了所有来自data ,虽然它只包含子string。 当我把代码改成: this.smallpart = data.substring(12,18)+""; 问题解决了! 现在我的应用程序现在使用很less的内存! 这怎么可能? 任何人都可以解释吗? 我认为this.smallpart一直参考数据,但为什么呢? 更新:我怎样才能清除大string呢? 将数据=新的string(data.substring(0,100))做的事情?

如何通过实际内存使用情况来查看顶级进程?

我有一个12G内存的服务器。 顶部的一个片段如下所示: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12979 frank 20 0 206m 21m 12m S 11 0.2 26667:24 krfb 13 root 15 -5 0 0 0 S 1 0.0 36:25.04 ksoftirqd/3 59 root 15 -5 0 0 0 S 0 0.0 4:53.00 ata/2 2155 root 20 0 662m […]

如果一个DOM元素被删除,它的监听器是否也从内存中删除?

如果一个DOM元素被删除,它的监听器是否也从内存中删除?

创build一个默认的堆栈大小为50x的线程有什么危险?

我目前正在研究一个性能非常关键的程序,我决定探索一条可能有助于减less资源消耗的path,从而增加我的工作线程的堆栈大小,这样我就可以移动大部分数据( float[] )访问堆栈(使用stackalloc )。 我读过一个线程的默认堆栈大小为1 MB,所以为了移动我所有的float[]我必须将堆栈扩展大约50倍(到50 MB〜)。 我知道这通常被认为是“不安全的”,不build议使用,但是通过对这个方法进行基准testing,发现处理速度提高了530% ! 所以我不能不经过进一步的调查就通过这个选项,这就引出我的疑问。 将堆栈增加到如此之大(可能出错的地方)有哪些危险?我应该采取哪些预防措施来尽量减less这种危险? 我的testing代码, public static unsafe void TestMethod1() { float* samples = stackalloc float[12500000]; for (var ii = 0; ii < 12500000; ii++) { samples[ii] = 32768; } } public static void TestMethod2() { var samples = new float[12500000]; for (var i = 0; i < […]

如何确定默认的java堆大小?

如果我从java命令行省略-Xmxn选项,则使用默认值。 根据java文档 “默认值是在运行时根据系统configurationselect”。 什么系统configuration设置影响默认值?