Java基础——JVM内存模型概述

JVM内存划分为:

一、栈

    1)虚拟机栈;

    2)本地方法栈。

二、堆

三、方法区

四、程序计数器

栈(stack)

    每一个线程包含一个stack区,只保存基本数据类型和对象的引用,对象都存放在共享heap中;

    每个栈中的数据(基本数据类型和对象引用)都是私有的,其他栈不能访问;

    栈分为3部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令);

    栈的优势劣势:存取速度比堆要快,仅次于直接位于CPU的寄存器,但必须确定的是存在stack中的数据大小与生存期必须是确定的,缺乏灵活性。单个stack的数据可以共享。

    是一个先进后出的数据结构,通常保存方法中的参数,局部变量。

    在java中,所有基本类型和引用类型都在stack中储存,栈中数据的生存空间一般在当前scopes内。

堆(heap)

    存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令);

    jvm只有一个heap区,被所有线程共享,不存放基本类型和对象引用,只存放对象本身。

    堆的优劣势:堆的优势是可以动态的分配内存大小,生存期也不必事先告诉编译器,java的垃圾收集器会自动收取这些不在使用的数据,但缺点是,由于要在运行时动态分配内存,存取速度慢。

方法区

    又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量;

    方法区中包含的都是在程序中永远的唯一的元素。

    存储类加载信息、常量、静态变量等。常量池属于方法区的一部分。

程序计数器

    程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。- - 摘自《深入理解Java虚拟机》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ddm01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值