JAVA内存模型

java内存模型

  • java中代码执行、对象创建,都是在虚拟机中处理的。
  • jdk1.6之前jvm虚拟机结构
    • 栈(stack)

      • 存放方法中的局部变量,每一次方法的调用都是通过栈进行传递的,方法数据传递一定在栈中
      • 局部变量:方法中的变量和参数
      • 作用域:变量有效的范围,局部变量的作用域根据所属的{}内进行判断,或当前的方法中
      • 如果变量超出了作用域,会立即从栈中消失
    • 堆(heap)

      • 凡是new出来的都在堆中
      • 堆是垃圾收集器的主要区域,也称之为GC堆
      • 堆中数据都有默认值:
        • 整数类型:0
        • 浮点类型:0.0
        • 字符类型:‘\u0000’(unicode码表中的不可见字符)
        • 布尔类型:false
        • 引用类型:null
    • 方法区(method area)

      • 存储.class的相关信息,包含方法信息
      • 用于存储已经被虚拟机加载的类信息和常量,静态变量,即时编译后的代码
      • 方法区也被称为永久代,方法区是标准,永久代是实现
      • 数据存放在磁盘
    • 本地方法栈(native method stack)

      • 与系统相关,和虚拟机栈类似
      • 区别:虚拟机栈执行java方法,本地方法栈执行本地的方法(c,c++)
      • 本地方法都被native修饰
    • 寄存器(pc register)

      • 与cpu相关,包含程序计数器
      • 控制程序执行的顺序,记录程序执行的时间
    • 总结:
      • 栈:存放局部变量,方法调用和数据传递
      • 堆:new出来的都在堆中
      • 方法区:静态变量,常量,方法和类的相关信息
  • 在jdk1.7中的改变
    • 将java堆中开辟了一个新空间,存放运行时常量池
    • 移除方法区中的常量池
  • 在jdk1.8中的改变
    • 方法区被移除,取而代之的是元空间

    • 元空间直接使用内存

    • 是为了融合Hotsport和JRockit虚拟机而做出的改变

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值