凡事都在事上磨,这样才能精进,成长进步提高! ------ 博客园首页

Java 堆和栈的区别

堆内存和栈内存的区别:
   1、应用程序所有的部分都使用堆内存,然后栈内存通过一个线程运行来使用。
   2、不论对象什么时候创建,他都会存储在堆内存中,栈内存包含它的引用。栈内存只包含原始值变量好和堆中对象变量的引用。
   3、存储在堆中的对象是全局可以被访问的,然而栈内存不能被其他线程所访问。
   4、栈中的内存管理使用LIFO的方式完成,而堆内存的管理要更复杂了,因为它是全局被访问的。
   5、栈内存是生命周期很短的,然而堆内存的生命周期从程序的运行开始到运行结束。
   6、我们可以使用-Xms和-Xmx JVM选项定义开始的大小和堆内存的最大值,我们可以使用-Xss定义栈的大小
   7、当栈内存满的时候,Java抛出java.lang.StackOverFlowError异常而堆内存满的时候抛出java.lang.OutOfMemoryError: Java Heap Space错误
   8、和堆内存比,栈内存要小的多,因为明确使用了内存分配规则(LIFO),和堆内存相比栈内存非常快。

总结:
   1 栈:为编译器自动分配和释放,如函数参数、局部变量、临时变量等等
   2 堆:为成员分配和释放,由程序自己申请、自己释放。否则发生内存泄露。典型为使用new申请的堆内容。
        除了这两部分,还有一部分是:
   3 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。

 

posted @ 2021-03-08 16:37  zeenzhou  阅读(30)  评论(0编辑  收藏