堆和栈

区别

  • 功能。栈内存存放局部变量与方法调用地址。堆内存存放JAVA中的对象,无论是成员变量、局部变量还是静态变量,它们指向的对象都存储在堆中。
  • 共享。栈内存属于单个线程,其存储的变量只能在其所属线程中可见。堆内存中的对象对所有线程可见,可被所有线程访问。
  • 异常。栈中没有可用内存分配时,会抛出StackOverFlowError。堆中没有可用内存分配时,会抛出OutOfMemoryError。

参考资料