内存的概念

内存的概念

      内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的(来源于百度百科)。
      说白了内存就是用来存放CPU的临时运算数据。内存往细了分又有:堆、栈等,任何优秀程序中都有良好内存的划分。

内存泄漏

      内存泄漏是指在申请内存后,无法释放已申请的内存,在Java中内存泄漏的范围不会很大,因为Java有垃圾回收器(Garbage Collection, GC),gc它会回收程序在运行中产生的无用且不可达的的对象。在Java中造成内存泄漏的是无用却有指向的对象,这些对象不会被gc所回收,而且它还在占用着内存。一次内存泄漏看似不会造成太大的影响,但是堆积下来就会造成内存溢出,内存溢出包括内存泄漏。

内存溢出

      当程序申请内存,但是没有足够的内存分配给申请者时,程序就会停止运行并且报错,这就是程序溢出了,或许现在还比较模糊那让我们来写一些能让内存溢出的程序。

栈溢出

      Java中我们知道栈中存放了对象的引用,但是靠这个来使栈溢出是件不容易的事,有没有更容易的方法呢?其实Java中方法内存的分配也是在栈中实现的.那么我们可不可以用递归使它溢出呢?
     下面是一个简单的死递归:
栈溢出Code
     
接下来运行的结果又是怎样呢:
栈溢出结果
      果然不出所料的溢出了

堆溢出

      我们知道堆中存放着对象的实体,那么能不能通过死循环创建对象来使堆溢出呢,答案是不行的因为有垃圾回收机制的原因所以这个办法行不通,有没有什么简单的办法呢,Java中创建数组会向内存申请对应的内存空间那么我们创建一个大一点的数组会怎样
堆溢出Code
堆溢出Code
      在平常的写代码中我们应该不常遇见溢出的情况,不过一个好的程序也应该尽量的减少内存泄漏毕竟内存泄漏的尽头就是内存溢出。

猜你喜欢

转载自blog.csdn.net/a499663321/article/details/80660930