前面讲述的程序计数器,虚拟机栈,本地方法栈它们都有一个共同的特点,它们都是线程私有的,而从我们现在开始讲解的堆以及后面的方法区,它们可以看成是线程共享的区。
我们来看看它的定义
它的英文叫做Heap堆
我们通过new关键字创建的堆对象,都会使用堆的内存。
它有两大特点
第一它是线程共享的,所以堆中的对象都需要考虑线程安全的问题,以前我们说的虚拟机栈,它中的局部变量都是线程私有的,只要它的局部变量不逃逸出方法的作用范围,那么它就是线程安全的,但是我们的堆则不一样,因为我们堆中的对象,都是要考虑线程安全的,因为它们都是线程共享的。当然也有例外,后面讲解。第二个特点堆里面有一个垃圾回收机制,也就是堆中不再被引用的对象,就会当成垃圾进行回收,以释放空闲的内存,不至于内存被创建的对象给撑爆。
这就是堆的两个特点