美文网首页
10.11java中的堆和栈

10.11java中的堆和栈

作者: 205蚁 | 来源:发表于2018-11-18 17:03 被阅读0次

    java高级-堆和栈

      1. java堆 /栈
      1. 栈内存 / 堆内存的区别

    1. java堆 /栈

    1.Java程序运行时的内存分配策略
        1.静态存储区(方法区):主要存放静态数据,全局static数据和常量。程序编译时分配好
        2.栈区:方法体内的局部变量都在栈上创建
            方法在执行时,方法体内的局部变量会在栈上创建局部内存区,并在方法结束时,这个局部变量所持有的内存将会被自动释放,因此栈内存分配运算内置于处理器的指令集中,效率很高,容量有限
        
        3.堆区:动态内存分配区。通常就是指在程序运行时直接new 出来的内存,这些内存在不运行时,会被java回收机制回收
    

    2. 栈内存 / 堆内存的区别

        1.从内存分配角度
            在方法体内定义的(局部变量)一些基本类型的变量和对象引用变量都是在方法的栈内存中分配的。
            
            堆内存用来存放所有由new 创建的对象(包括该对象其中的所有成员数量)和数组。在堆中分配的内存,将由java垃圾回收期来自动管理。
    3.Java内存回收机制
        图:
    4.Java内存泄露引起的原因
        无用对象持续使用内存,得不到释放
        长生命周期的对象持有短生命周期的引用
    
    总结:
        堆:运行时,垃圾回收,动态分配内存,存取速度(相对慢些,动态分配)
        栈:存取速度,生命周期是绑定的,栈区的数据可以共享

    相关文章

      网友评论

          本文标题:10.11java中的堆和栈

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