• Java程序运行的内存分配


    Java的内存分配

    A:栈 存储局部变量
    B:堆 存储所有new出来的
    C:方法区(程序代码及方法相关)
    D:本地方法区(系统相关)
    E:寄存器(CPU使用)

    注意:
    a:局部变量 在方法定义中或者方法声明上定义的变量。
    b:栈内存和堆内存的区别
    栈:数据使用完毕,就消失。
    堆:每一个new出来的东西,且都有地址

    每一个变量都有默认值
    byte,short,int,long 0
    float,double 0.0
    char 'u0000'
    boolean false
    引用类型 null
    数据使用完毕后,在垃圾回收器空闲的时候回收。

    栈与堆的具体区别

    堆和栈都是内存上的一快空间,
    只是栈是先进后出的,就像一个长管子,只一边有留孔,向里面放东西,
    先放入的在底部,后放入的在先放入的上面,要想拿出先放入的,要先拿出后放入的.由无需程序员管理,使用即可。
    堆就象一块空地,可以随便放,和随便取.由程序员管理,用时申请,不用时要求手动释放(否则可能发生内存溢出)。
    另外,栈的执行速度快,而堆的执行速度相比就慢了下来,因为他可以随时,随大小存取。
    栈区内存,由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。访问顺序遵循先进后出原则。 栈stack:是程序启动时候由程序留出的工作内存区  比如程序的局部变量,函数调用等都是从栈中获取,这个内存在需要的时候分配,不需要就释放,由程序编译时确定栈区空间大小。 
    堆heap:是计算机空余的物理内存和硬盘空余空间的和。但是它的获取不是自动的了,相比从栈中分配内存要慢些。 使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。 使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。堆区空间是应用程序在运行的时候请求操作系统分配给自己内存。
  • 相关阅读:
    生成唯一流水码
    搜索类
    数字转中文
    字符串转数组工具类
    类转换
    P1112 区间连续段
    P1113 同颜色询问
    Turtlebot3 机器学习
    Turtlebot2进阶教程
    turtlebot A2
  • 原文地址:https://www.cnblogs.com/shysky77/p/4415741.html
Copyright © 2020-2023  润新知