【问题标题】:How is disk memory being used/consumed by programs?程序如何使用/消耗磁盘内存?
【发布时间】:2015-08-11 06:38:23
【问题描述】:

一个假问题: 最近我的磁盘内存不足: 我不断收到 java.OutOfMemoryError,java 堆空间,后来我的 Virtual Box 遇到了“磁盘上没有足够的可用空间”错误。 后来发现我的 256GB SSD 几乎都被消耗/用完了。

所以我想知道运行这些程序会如何消耗我的内存/磁盘使用量? 这是如何运作的? 我知道这背后的基础知识,在堆/堆栈上分配空间,然后在使用后释放它们。 (如果我错了纠正我。) 但是如果是这样的话,那么磁盘应该不会用完了吧? (如果我没有在我的桌面上添加任何其他东西,只用它来运行一定数量的程序)

我真的很想了解正在运行的程序是如何消耗/使用磁盘/内存的。 如果以前有人问过这个问题,请将其与那个问题联系起来。 我为愚蠢的问题道歉,但我相信它会对像我这样的程序员有帮助。

感谢您说得更清楚。 Q1:为什么程序会占用磁盘空间? A2:“java.OutOfMemoryError, java heap space”是怎么发生的?跟记忆有关吧?

【问题讨论】:

  • 内存和硬盘空间是非常不同的东西(我相信你知道)。我怀疑“磁盘内存”是指virtual memory
  • 虚拟内存和磁盘存储,感谢@RJFalconer
  • 您的问题通过引用VirtualBox变得更加复杂,它带来了动态磁盘的问题,并进一步模糊了内存和硬盘空间之间的区别。您是在寻找特定于 VB 的答案,还是一般的“为什么程序会占用磁盘空间?”回答?
  • 两者。谢谢你让它更清楚。 Q1:为什么程序会占用磁盘空间? A2:“java.OutOfMemoryError, java heap space”是怎么发生的?跟记忆有关吧?

标签: memory disk hard-drive


【解决方案1】:

为什么程序会占用磁盘空间?

我知道这背后的基础知识,在堆/堆栈上分配空间,然后在使用后释放它们。但是如果是这样的话,那么磁盘应该不会用完了吧?

其实是可以用完的。
如果您进程的虚拟内存中的分配恰好映射到磁盘上的页面文件,并且您的页面文件大小设置为由操作系统管理,则内存分配可能会消耗硬盘空间。

如果您想了解有关内存映射的更多信息,这里有一个很好的问题: Understanding Virtual Address, Virtual Memory and Paging

页面文件的增长实际上并不是对您的分配的直接响应,而是对新的当前提交大小接近保留大小的响应。如果您想了解有关此过程的更多信息(提交与保留、堆栈扩展等),我建议您阅读Pushing the Limits of Windows: Physical Memory

为什么会出现 java.OutOfMemoryError?

http://docs.oracle.com/javase/7/docs/api/java/lang/OutOfMemoryError.html

当 Java 虚拟机由于内存不足而无法分配对象时引发,并且垃圾收集器无法提供更多内存。

发生这种情况通常是因为您的页面文件太小或磁盘太满。

另见:

【讨论】:

  • 很好地回答并感谢您指出那些超级有用的链接! :)
猜你喜欢
  • 1970-01-01
  • 2014-04-29
  • 2022-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2021-06-05
相关资源
最近更新 更多