如何向外行人解释什么是内存溢出

简介:

假设你有一张欠款清单,上面记录了你的债主的姓名和欠款金额。
screenshot

你还有一支神奇的铅笔,这支笔内置了一种擦除功能,如果你用它在纸上某个地方写字,它能自动的把这个地方以前有的字给擦除掉,这样就只显示出你新写上的东西。这就是计算机内存的工作原理,跟我们生活中的涂改写字方式稍有不同。

你买一辆5000美元的轿车,只付了500美元的首款,于是你欠他4500美元。他告诉你他的名字叫约翰-史密斯。你把他的名字和欠款数目写到欠款表上。你的欠款清单现在看起来是这样:
screenshot

后来,你按照欠款单上的记录还清了欠款。你偿还了4500美元(加上利息),把这条记录从欠款单上擦除了,现在你的欠款单又变成了空白。

之 后,你又从别人那里借了1000美元。他告诉你他的名字叫“约翰-史密斯 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx9999999999”。你把欠款数目(1000美元)和债主的姓名(约翰-史密 斯xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx9999999999)写到了你的欠款单上。现在你的欠款单看起来是这个样子:
screenshot

(1000美元的最后一个0并没有被擦除掉。这并不重要。)

当写他的姓名时,姓名栏里写不下他的名字,但你继续往后写,写到了“欠款数目”栏里!这就是内存溢出。

后来,这个欠款单提醒你还欠约翰-史密斯xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx先生99999999990美元的钱。你找到他,偿还了他大概1000亿美元的欠款。

文章转载自 开源中国社区 [http://www.oschina.net]

相关文章
|
6月前
|
存储 程序员 编译器
C/C++堆栈详细分析,新老程序员必会
C/C++堆栈详细分析,新老程序员必会
195 1
|
6月前
|
缓存 Java
《JVM由浅入深学习九】 2024-01-15》JVM由简入深学习提升分(生产项目内存飙升分析)
《JVM由浅入深学习九】 2024-01-15》JVM由简入深学习提升分(生产项目内存飙升分析)
54 0
|
存储 Java
java内存机制详解,老年人也看得懂
java内存机制详解,老年人也看得懂
80 0
JVM垃圾回收器详解:不同的复制算法比较及对程序员的启迪
前面提到整个JVM中只有串行回收按照Cheney的设计实现新生代回收,其他的垃圾回收器在新生代回收时都对Cheney的复制算法进行了增强。 其中最大的改变就是不使用宽度优先,而是使用深度优先的处理方式。其中Moon在1984年提出了一种近似深度优先遍历的处理方式,称为层次遍历,使用层次遍历大概可以将GC效果提升6%。
|
Java Windows
【JVM原理探索】让你完全攻克内存溢出(OOM)这一难题
【JVM原理探索】让你完全攻克内存溢出(OOM)这一难题
188 0
|
存储 Java 数据库
java内存溢出问题(工作中常用、面试中常问的一个知识点)
内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。这篇文章整理自《深入理解java虚拟机》。因为内存溢出问题不仅是工作中的一个重要方面,而且面试中也是经常问。
176 0
java内存溢出问题(工作中常用、面试中常问的一个知识点)
|
存储 缓存 监控
|
存储 Java
手把手教你认识下 JVM 的内存划分,再记不住就真的没办法了
Java 在运行时会将内存划分为若干个区域,粗略的可以将内存划分为堆区和栈区,堆区主要存储 Java 对象。栈区主要记录对象的引用地址。
手把手教你认识下 JVM 的内存划分,再记不住就真的没办法了
|
安全 Java
关于内存溢出,咱再聊点有意思的?
关于内存溢出,咱再聊点有意思的?
关于内存溢出,咱再聊点有意思的?
不起眼,但是足以让你收获的JVM内存案例
不起眼,但是足以让你收获的JVM内存案例
不起眼,但是足以让你收获的JVM内存案例