07.JVM内存分析-Java第一阶段

栈内存stack:栈内存首先是一片内存区域 ,存储的都是局部变量 ,凡是定义在 方法中的都是局部变量(方法外的是全局变量) ,for循环内部定义的也是局部 变量 ,是先加载函数才能进行局部变量的定义 ,所以方法先进栈 ,然后再定义变 量 ,变量有自己的作用域 ,一旦离开作用域 ,变量就会被释放 。栈内存的更新速 度很快 , 因为局部变量的生命周期都很短 。堆内存heap:存储的是数组和对象 (其实数组就是对象) ,凡是new建立的都 是在堆中 ,堆中存放的都是实体(对象) ,实体用于封装数据 ,而且是封装多个 (实体的多个属性) ,如果一个数据消失 ,这个实体也没有消失 ,还可以用 ,所 以堆是不会随时释放的 ,但是栈不一样 ,栈里存放的都是单个变量 ,变量被释放 了 ,那就没有了 。堆里的实体虽然不会被释放 ,但是会被当成垃圾 ,Java有垃圾回收机制不定时的收取 。

1 . 栈描述的是内存模型 每个方法被调用都会创建栈帧

2 . jvm为每个方法都创建栈 用于存放该线程的执行方法的信息 实际参数 ,局部变量等

3 . 栈属于线程私有不能共享

4 . 栈于系统自动分配 先进先出后进后出/弹夹 速度快连续的内存空间

1 . 堆存储创建好的数组和对象(数组也是对象)

2 . jvm只有一个堆被所有线程共享

3 . 堆是不连续的空间 速度慢

方法区(静态区)method area

1 . 只有一个 可共享

2 . 也是堆 ,存放程序中永远不变的 内容 (类信息 ,class对象 ,静态变量 ,字符串常量)

static修饰的成员变量称为静态成员变量与类生命周期一样从属于类

程序计数器

用于记录程序线程信息,下一步执行什么操作,循环,跳转等

更多内容 公众号:天堂比不过家乡
,别忘了 赞助关注哦!

你可能感兴趣的:(07.JVM内存分析-Java第一阶段)