程序如何使用/使用磁盘存储器?

时间:2015-05-28 16:11:59

标签: memory disk hard-drive

虚拟问题: 最近我的磁盘内存不足: 我一直得到java.OutOfMemoryError,java堆空间,后来我的Virtual Box遇到了#34;磁盘上没有足够的可用空间"错误。 然后事实证明我的256GB SSD几乎全部消耗/使用。

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

我真的很想了解运行程序如何使用/使用磁盘/内存。 如果之前已经提出过这个问题,请将其与该问题联系起来。 我为虚假问题道歉,但我相信这会对像我这样的程序员有所帮助。

感谢您让它更清晰。 Q1:为什么程序会占用磁盘空间? A2:" java.OutOfMemoryError,java堆空间"发生?与记忆有关,是吗?

1 个答案:

答案 0 :(得分: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虚拟机由于内存不足而无法分配对象时抛出,垃圾收集器不再提供更多内存。

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

另见: