美文网首页
java中的堆与栈

java中的堆与栈

作者: 秋灯锁忆 | 来源:发表于2017-06-09 00:13 被阅读0次

    关键词:堆与栈的定义,生存周期


    定义

    在运行java程序时,java把内存划分成两种:一种是栈内存,一种是堆内存。

    • 栈:存取速度较快,内存容量小,遵循先进后出的存取规则
    • 堆:存取数度较慢,内存容量较大,存取数据采用逻辑连续的链式存取(即数据实际存取有可能在不连续的内存块中)

    堆栈内存大小是JVM自动分配的,由于JVM版本不同,大小可能会有差异。


    功能

    栈:程序执行,堆:数据存取。

    • 存取数据类型
      • 栈:函数调用过程是在栈中完成的,所以局部变量,形式参数都是在栈中分配内存的,当参数类型是非基础类型对象时栈中分配对象的引用,同时,8大基础类型的引用与值均在栈中分配(这里主要基于运行速度的考量)。
      • 堆:主要存取对象实例。
    • 数据生命周期
      • 栈:运行时数据自动入栈,当数据出栈后,自动销毁。这也就说明了局部变量的作用范围。(在调用分配前,数据区的大小是已知的,该过程是在编译时完成的)
      • 堆:程序员使用new等获取内存空间请求,程序运行后分配给内存。同时当存储对象失去所有栈中的索引后,列入可清理的内存清单,在之后的某一时刻被java垃圾回收机制GC回收。(这里是不知道数据内存大小的,不知道数据的具体回收时间的)
    • 数据共享
      • 栈:栈中数据是共享的。上面提到基本数据类型的引用以及值均是存储在栈中的,如果遇见int a=3;栈中创建a的引用,同时查找栈中是否存在3,若存在,建立明确指引方向;若不存在,存进3。
      • 堆:由于其本身仅存储数据,所以没有数据共享。(注意:这里有一个String包装,请参考[java字符串池][1])
        [1]:[http://www.jianshu.com/p/92085ebbfa71]

    (标注:这里还差线程。。。。。。。。。。。。。)

    相关文章

      网友评论

          本文标题:java中的堆与栈

          本文链接:https://www.haomeiwen.com/subject/aysnfxtx.html