1.栈内存主要存放的是基本数据类型和引用变量。
2.堆内存主要存放的是new出来的对象和数组。
3.引用变量指的是new出来的对象或数组在栈内存中的地址,换句话说,就是每一个堆内存中的变量在栈内存中都存放着一个地址,通过这个地址可以访问到堆内存中的变量。
4.c语言可以通过指针访问堆内存中的变量,而java只能通过访问栈内存中的引用变量进而获取堆内存中的变量。
5.栈内存中存放的变量在代码执行过这个变量的作用域会自动被释放出来,而堆内存中的变量不会被自动释放,而是在没有栈内存中的引用变量指向堆内存的变量时,堆内存中的变量才会变成垃圾,进而在随后一个不确定的时间被java虚拟机自动垃圾回收器释放掉。
以上几点是基于个人简单地理解,欢迎各位大佬指正!