Questions tagged «memory»

使用此标签进行内存管理或编程问题。有关内存硬件问题或通用软件中的错误的问题,请访问https://superuser.com或https://serverfault.com(如果这与企业级硬件或软件有关)。

9
为什么在字符串后附加“”会节省内存?
我说了一个变量,里面有很多数据String data。我想通过以下方式使用此字符串的一小部分: this.smallpart = data.substring(12,18); 经过数小时的调试(使用内存可视化器),我发现objects字段smallpart记住了的所有数据data,尽管它仅包含子字符串。 当我将代码更改为: this.smallpart = data.substring(12,18)+""; ..问题解决了!现在我的应用程序现在只占用很少的内存! 那怎么可能?谁能解释一下?我认为this.smallpart一直在引用数据,但是为什么呢? 更新:那 我怎么清除大字符串?data = new String(data.substring(0,100))会做这件事吗?

6
多维数组如何在内存中格式化?
在C语言中,我知道可以使用以下代码在堆上动态分配一个二维数组: int** someNumbers = malloc(arrayRows*sizeof(int*)); for (i = 0; i < arrayRows; i++) { someNumbers[i] = malloc(arrayColumns*sizeof(int)); } 显然,这实际上创建了指向一堆单独的一维整数数组的一维指针数组,并且“系统”可以弄清楚我要问的意思: someNumbers[4][2]; 但是当我静态声明2D数组时,如以下行所示: int someNumbers[ARRAY_ROWS][ARRAY_COLUMNS]; ...是否在堆栈上创建了类似的结构,还是完全是另一种形式?(即它是一维指针数组吗?如果不是,它是什么,以及如何找出对其的引用?) 另外,当我说“系统”时,实际上是由什么负责的?内核?还是C编译器在编译时将其整理出来?


11
如何使用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()返回-1在Windows上)。 尽管最初是根据GPL许可的,但已将其更改为Apache 2.0,通常可用于封闭源商业产品。

4
运行计算机程序会怎样?
我知道一般的理论,但我不适合细节。 我知道程序驻留在计算机的辅助存储器中。一旦程序开始执行,它将被完全复制到RAM中。然后,处理器一次检索几条指令(取决于总线的大小),将它们放入寄存器中并执行它们。 我也知道计算机程序使用两种内存:堆栈和堆,它们也是计算机主内存的一部分。堆栈用于非动态内存,堆用于动态内存(例如,与newC ++中的运算符相关的所有内容) 我不明白的是这两件事是如何联系的。堆栈在什么时候用于执行指令?指令从RAM到堆栈,再到寄存器?

11
在Linux中,缓冲区与缓存之间有什么区别?
对我来说,尚不清楚两个Linux内存概念buffer和之间有什么区别cache。我已经阅读了这篇文章,在我看来,它们之间的区别在于有效期政策: 缓冲区的策略是先进先出 缓存的策略是“最近最少使用”。 我对吗? 特别是,我正在查看两个命令:free和vmstat james@utopia:~$ vmstat -S M procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b 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 …
179 linux  caching  memory  buffer 

17
查找Java堆大小和使用的内存的命令行工具(Linux)?
是否有命令行工具(Linux)检查Java应用程序的堆大小(和已用内存)? 我已经尝试通过jmap。但是它提供了信息。关于内部存储器区域,例如Eden / PermGen等,这对我没有用。 我正在寻找类似的东西: 最大内存:1GB 最小内存:256 MB 堆内存:700 MB 使用的内存:460 MB 就这样。我知道我可以在JConsole等中看到它,但是我需要一个命令行工具(无法启用JMX等)。 您知道这样的工具/命令吗?
171 java  linux  performance  memory  heap 

5
缓存行如何工作?
我了解处理器会通过高速缓存行将数据带入高速缓存,例如,在我的Atom处理器上,无论所读取的实际数据大小如何,一次都会引入约64个字节。 我的问题是: 想象一下,您需要从内存中读取一个字节,这64个字节将被带入缓存? 我看到的两种可能性是,这64个字节从感兴趣的字节下方最接近的64个字节边界处开始,或者这64个字节以某种预定的方式散布在该字节周围(例如,一半以下,一半以上或上面所有)。 哪有

8
字符串文字:它们去哪里了?
我对字符串文字在哪里分配/存储感兴趣。 我在这里确实找到了一个有趣的答案,说: 内联定义字符串实际上是将数据嵌入程序本身,并且不能更改(某些编译器通过巧妙的技巧允许这样做,不要打扰)。 但是,它与C ++有关,更不用说它不会打扰。 我很烦 = D 所以我的问题是我的字符串文字在哪里以及如何保存?为什么我不应该尝试更改它?实施因平台而异吗?是否有人愿意详细说明“智能技巧”?

8
Scala vs Java,性能和内存?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我热衷于研究Scala,并提出了一个似乎无法找到答案的基本问题:一般来说,Scala和Java在性能和内存使用方面是否有所不同?

13
java.lang.OutOfMemoryError:位图大小超出VM预算-A​​ndroid
我开发了一个在Android上使用大量图像的应用程序。 该应用程序运行一次,填满屏幕(上的信息Layouts,Listviews,Textviews,ImageViews,等)和用户读取的信息。 没有动画,没有特效或任何可以填满内存的东西。有时可绘制对象可以更改。有些是android资源,有些是保存在SDCARD文件夹中的文件。 然后,用户退出(该onDestroy方法被执行,并且应用程序由VM保留在内存中),然后在某个时候用户再次进入。 每次用户进入该应用程序时,我都会看到内存越来越多,直到用户获得java.lang.OutOfMemoryError。 那么处理许多图像的最佳/正确方法是什么? 我应该将它们放在静态方法中,这样就不会一直加载它们吗?我是否必须以特殊方式清洁版面或版面中使用的图像?

13
“在编译时分配的内存”的真正含义是什么?
在像C和C ++这样的编程语言中,人们经常引用静态和动态内存分配。我理解这个概念,但是“在编译时分配(保留)所有内存”这句话总是让我感到困惑。 据我了解,编译将高级C / C ++代码转换为机器语言并输出可执行文件。如何在已编译文件中“分配”内存?难道不是所有虚拟内存管理工具都总是在RAM中分配内存吗? 按照定义,内存分配不是运行时的概念吗? 如果我在C / C ++代码中创建一个1KB的静态分配变量,这将使可执行文件的大小增加相同的数量吗? 这是在“静态分配”标题下使用该短语的页面之一。 返璞归真:内存分配,回顾历史

9
我的变量存储在内存中的什么位置?
通过考虑将内存分为四个部分:数据,堆,堆栈和代码,全局变量,静态变量,常量数据类型,局部变量(在函数中定义和声明),变量(在主函数中),指针在哪里,并动态分配空间(使用malloc和calloc)存储在内存中? 我认为它们的分配如下: 全局变量------->数据 静态变量------->数据 常量数据类型----->代码 局部变量(在函数中声明和定义)-------->堆栈 在主函数----->堆中声明和定义的变量 指针(例如char *arr,int *arr)------->堆 动态分配的空间(使用malloc和calloc)-------->堆栈 我仅从C角度指这些变量。 如果我错了,请纠正我,因为我是C新手。

9
在C语言中,花括号是否充当堆栈框架?
如果我在一组新的花括号中创建一个变量,那么该变量是从右括号中弹出的堆栈,还是一直挂到函数结尾?例如: void foo() { int c[100]; { int d[200]; } //code that takes a while return; } d在本code that takes a while节中会占用内存吗?
153 c  memory  stack 

10
iOS应用最大内存预算
我正在开发一款至少定位3gs的ios游戏。我们将高清资产用于视网膜显示设备(iphone 4,ipod touch 4th gen)。 在内存方面,Ipod Touch 4th gen似乎对我们来说是最受限制的设备,因为它具有与3gs相同的RAM(与Iphone 4的512相比,为256),但是我们使用的是HD资产。尝试加载100-110mb的ram时,该应用程序曾经崩溃过,但是现在我们的内存降到了70MB,我们再也没有加载过崩溃了。 经过大量搜索之后,似乎没有官方的硬限制,因此我们应该如何知道使用什么内存预算是安全的呢?我们希望能够给艺术家一个预算,使他们可以在没有记忆的情况下使用每张地图。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.