• 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 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。

    因为相信,所以看见.
  • 相关阅读:
    C# 打开模态对话框 和打开文件夹
    C# 统计字符串出现的个数
    html table内容不随标题滚动
    log4net 局部代码 看不懂....
    js的replace, 高亮, insertAdjacentHTML , tbody.innerHTML
    python之tkinter使用举例-Button
    使用pygal_maps_world.i18n中数据画各大洲地图
    使用pygal_maps_world展示世界地图
    python之pygal:掷两个不同的骰子并统计大小出现次数
    python之文件目录操作
  • 原文地址:https://www.cnblogs.com/zeenzhou/p/14500485.html
Copyright © 2020-2023  润新知