java中的内存划分

java中的内存划分

内存就是计算机中的内存条,如果要想运行,就必须开辟一块儿内存条
java的内存需要划分为五个部分

1.栈内存(Stack):存放的都是方法中的局部变量

                局部变量:方法的参数,或者是方法内部的变量
                作用域:一旦超出作用域,立刻从栈内存中消失

2.堆内存(Heap): 凡是new(数组也是new出来的)出来的东西,都在堆当中。

比如数组:数组的名称是在栈里面,值在堆里面
堆内存会有一个索引编号,堆内存里面的东西都有一个地址值:16进制。

   这个地址值会被赋值到栈内存当中,也就是定义他的变量的名称中,栈里面的变量实际存储的其实是一个地址值。
   然后我们根据堆内存的地址值找堆内存当中的数据,一共三次交替可以找到默认值
        堆内存当中的数据都有默认值。  
                   *int  默认值是0,
                   double 默认是0.0
                   字符 默认为‘\u0000’
                   boolean类型,默认为false
                   引用类型,默认为null*  

然后我们再改变元素,重新访问

3.方法区(Method Area):存储.class相关信息,.class信息包含方法的信息,比如叫什么名字,返回的什么,参数是什么。注意的是,真正方法运行,一定要在栈内存中。

4.本地方法栈(Native Method Stack):与操作系统相关

5.寄存器(pc Register):与CPU相关

JVM在执行java程序的时候,首先会执行存储在方法区中的main方法。main方法会进入到栈内存中(进栈,也叫压栈)。
栈内存会为main方法开辟一段内存空间,这时候我们在栈内存中定义一个数组,new出来的会存储到堆内存当中。
堆内存会给他继续开辟内存空间,这些空间会切割成一个个内存地址,并有一个个索引编号这些内存地址再返回给栈内存,栈内存再根据得到的内存地址值找到堆内存当中数组对应的默认的值

进栈之所以也叫压栈是因为栈是先进后出,后来的人会把先来的人压在底下

   JVM会找操作系统开辟一条main方法通向cpu的执行路径
   cpu就可以通过这个路径来执行我们的main方法
   而这个路径有一个名字,叫main(主)线程

集合数组等数据都是在内存中创建的,直接打印数组,得到的是他们的内存地址哈希值(数据类型@16进制数据0123456789abcdef)。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值