• Java内存模型


    对于整天写业务代码的人也许真的很难有时间,有精力去记住这些概念性的东西。其实平常也挺喜欢看这些东西的,但是就是看过之后过不了多久就会忘记,这真是个悲伤的故事

    Java 内存模型

    Java虚拟机将其管辖的内存大致分为三个逻辑部分: 方法区, Java栈, Java堆

    1.方法区是静态分配的,编译器将绑定在某个存储位置上,而且这些绑定不会在运行时改变。常数池,源码中的命名常量、String常量和static变量保存在方法区。

    2.Java Stack 是一个逻辑概念,特点是后进先出。一个栈的空间可能是连续的,也可能是不连续的。最典型的的Stack应用是方法的调用,Java虚拟机每调用一次方法就创建一个方法帧,退出该方法则对应的方法帧被弹出。栈中存储的数据也是运行时确定的。

    3.Java堆(heap)分配 意味着以随意的顺序,在运行时进行存储空间分配和收回的内存管理模型。 堆中存储的数据常常是大小、数量和生命周期在编译时无法确定的,Java对象的内存总是在heap中分配。

    Java内存分配

    1.基本数据类型直接在栈空间分配
    2.方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收;
    3.引用数据类型,需要用new 关键字来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的实体空间;
    4.方法的引用参数在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完后从栈空间回收;
    5.局部变量new出来时,在栈空间中和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收;
    6.方法调用时传入的实际参数,先在栈空间分配,在方法调用完成后从栈空间释放;
    7.字符串常量在常量池中分配,this 在堆内存中
    8.数组既在栈空间分配数组名称,又在堆空间分配数组实际的大小。

  • 相关阅读:
    洛谷P1368 均分纸牌(加强版) [2017年6月计划 数论14]
    洛谷P1621 集合 [2017年6月计划 数论13]
    NOIP模拟 6.30
    洛谷P1390 公约数的和 [2017年6月计划 数论12]
    洛谷P1573 栈的操作 [2017年6月计划 数论11]
    洛谷P2429 制杖题 [2017年6月计划 数论10]
    Vijos1212 Way Selection [2017年6月计划 二分图03]
    NOIP模拟赛 6.29
    RQNOJ PID192 梦幻大PK [2017年6月计划 二分图02]
    RQNOJ PID141 / 寻找代表元 [2017年6月计划 二分图01]
  • 原文地址:https://www.cnblogs.com/zhaiyt/p/10583268.html
Copyright © 2020-2023  润新知