Java语言持续运行一个程序会不会造成内存不足?怎么保持持续运行内存的使用不变呢
不明白
回答:什么叫持续运行呢,内存是一种资源,你需要去申请,然后操作系统给你开辟空间。Java程序它运行在JVM上,任何对象都会占据一定的空间,如果在持续运行的过程中,它不断的申请新的空间,然后又没有及时释放原来使用的空间,那么最后它会报错,内存溢出,叫OOM out of memory。当然,如果你在程序运行的过程中,并没有申请很多资源,它是可以在设定的空间内一直运行的。保持持续运行的内存使用不变,是相对比较困难的,但是限定在一个范围内,则可以通过控制资源的申请和释放来达到这个效果。
【相关推荐】
标记清除算法
效率问题
空间问题(标记清除后会产生大量不连续的碎片)
复制算法
优点:解决碎片化问题,顺序分配内存简单高效
缺点:只适用于存活率低的场景,如果极端情况下如果对象面上的对象全部存活,就要浪费一半的存储空间。
标记整理算法
为了解决复制算法的缺陷,充分利用内存空间,提出了标记整理算法。该算法标记阶段和标记清除一样,但是在完成标记之后,它不是直接清理可回收对象,而是将存活对象都向一端移动,然后清理掉端边界以外的内存。 如下图所示:
分代回收算法