栈是线程私有的,堆是线程共享的。它们存储的内容不同:栈存放的是局部变量,局部变量表中存放各种基本数据类型和对象的引用。堆存放的是对象实例。从作用上来说,栈是运行时单位,解决的是程序运行问题,即程序如何执行,如何处理数据。而堆是存储单位,解决的是数据存储问题,即数据怎么放、放在哪。