美文网首页
内存模型-堆和栈

内存模型-堆和栈

作者: RobertCrazying | 来源:发表于2018-02-14 12:03 被阅读27次

    前言

    堆和栈是基本的数据结构,今天以内存模型为例,讲解一下堆和栈。

    程序运行的时候系统会预先分配一段内存,对应的 Java 程序,就是 JVM 预先分配到的内存,从开始地址(低位)到结束地址(高位)。
    对于程序里面动态的内存请求如 new 一个对象,会在这段预先分配好的内存里面划出一部分给用户,规则是从低位到高位。
    堆的一个特点是不会自动消失,要么手动删除,要么像 JVM 那样由垃圾回收机制来回收。


    image.png

    栈的特点是先进后出,类似箱子。简单来说,栈是由于程序运行而临时占用的内存。一个方法对应一个栈帧,一个帧分配在栈里面。所有方法的局部变量都保存在帧里面,运行完就释放所有局部变量,回收帧内存。

    int main() {
       int a = 2;
       int b = 3;
       return add_a_and_b(a, b);
    }
    

    对于上面的方法,当 main 方法执行到内部方法 add_a_and_b 的时候程序会在栈里面为 add_a_and_b 在分配一帧,add_a_and_b 运行结束后属于它的帧先结束掉,然后回到 main 函数中断的地方。


    image.png

    总结

    对于 Java 程序而言,new 出来的对象所占用的内存在堆里面动态分配,指向对象的引用则用栈里面占用内存。

    参考链接: http://www.ruanyifeng.com/blog/2018/01/assembly-language-primer.html

    相关文章

      网友评论

          本文标题:内存模型-堆和栈

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