1.

内存是个什么玩意?

首先百度,这是百度百科的解释:

百度百科:内存

https://baike.baidu.com/item/%E5%86%85%E5%AD%98/103614?fr=aladdin

截取一段:内存(Memory)是计算机的重要部件之一,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据。

看来内存是相当重要了,现在大家用的电脑和手机中都有内存,如果电脑里没有内存还可以使用吗?(有兴趣的可以拆开电脑,把内存拆下来试试,但前提是你还能装回去。)

内存对于电脑来说,是个硬件,是能看到能摸到的东西。但在电脑运行程序过程中,简单的说,内存的作用是存储数据,比如我现在写的这些内容,都能实时存储,这并没有保存在硬盘上,而是保存在内存里。

硬件的东西我不了解,有兴趣研究的可以找找【计算机组成原理】类似的课程看一下。看完百科的内容大概明白了第一个问题:

1)什么是内存?

内存是计算机的重要组成部分,程序运行期间数据临时存储的地方,内存的大小影响计算机的性能。

举个例子:

包子铺包好的包子,放进笼屉里蒸(内存),蒸熟之后会一直在笼屉里虚腾着(内存临时存储),包子可能会被人买走(数据到外部存储),也可能最终会剩下来,剩包子要及时处理(关机或断电时内存数据的处理)。包子越小,一笼屉蒸的越多(减小数据量),笼屉越多,能蒸的包子就越多(加大内存)。但店铺大小是固定的,不能无限制的增加笼屉,也没有那么大精力,而且费钱(其它硬件限制内存大小上限,大内存使用不了,会造成资源浪费)。

这些只是对内存的基本理解,就像别人问你狗是什么动物,你脑海里能有个轮廓,细一点问你狗有几个脚趾?没养过狗的人可能真不知道。

2)内存有什么用?

读写数据,运行程序运,提高程序执行效率。

3)用在哪里?

电脑、移动设备。

4)怎么用?

操作系统有一套自己的使用方法,但这个方法怎么来的呢?没研究。

5)为什么这样用?

内存的设计原理?计算机组成原理?没研究。


2.

在查资料的时候看到了另外一些概念:

物理内存、虚拟内存、缓存

1)虚拟内存:

百度百科:虚拟内存

https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98/101812?fr=aladdin

就是把硬盘的空间拿出来当内存来用,反正大家都是存储数据的,作用都一样,互相用用也没什么,但它们毕竟本质不同,有一个大脑的经典例子,大家可以搜索自己看看。

2)缓存:

百度百科:缓存

https://baike.baidu.com/item/%E7%BC%93%E5%AD%98/100710?fr=aladdin

比内存更快,更优先处理数据,就好像刚包好的包子,要先放在案板上醒一醒,不能直接上屉蒸!(生活中处处是知识啊!)


3.

总结一下:

缓存、内存、虚拟内存、硬盘之间的区别?

1)数据读写顺序?

缓存——内存——虚拟内存——硬盘

2)各自的作用?

缓存:主要是数据读写,缓存的速度会更快,但能发挥多少效率跟算法关联紧密;有一级缓存、二级缓存之分,还有硬盘缓存、CPU缓存、系统缓存、网络缓存、分布式缓存等,缓存的使用场景很多,目的简单说就是希望数据读取能更快,效率更高!在软件开发中,缓存的思想也很普遍。

内存:电脑中一般称之为内存条的硬件,程序的运行在内存中进行,内存大小影响电脑的性能。

虚拟内存:将一部分硬盘空间当内存来使用,缓解内存压力,是内存管理的一种技术

硬盘:磁盘存储器(magnetic disk storage),以磁盘为存储介质的存储器。它是利用磁记录技术在涂有磁记录介质的旋转圆盘上进行数据存储的辅助存储器。具有存储容量大、数据传输率高、存储数据可长期保存等特点

3)编程中用到?

那面试题中问到的内存问题,是跟哪个有关?也就是说,Java程序运行时占用的内存,是缓存还是内存还是虚拟内存?JVM的内存区域又是指哪一块呢?


下次开始研究,Java的内存是指什么。