搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 唯有时光不负你 > Java的内存区域模型与内存模型

Java的内存区域模型与内存模型

唯有时光不负你 2019-04-16
举报

内存区域图:



  • 堆: 主要用于存放对象,所有对象实例以及数组都要在堆上分配。Java堆是GC(garbage collector)管理的主要区域。该区域为所有Java线程共享,非线程安全,在JVM启动时创建。
  • 方法区:存放加载的类信息(名称,修饰符),常量,类变量信息,类方法信息。方法区数据被所有Java线程共享。一般不会被GC,当方法区超过其允许的大小时,会放生OOM。方法区也是Java堆中的一部分。
  • 程序计数器: 用于多线程切换执行时,记录上一次执行的指令地址。该部分内存为线程私有。
  • Java栈: 当Java创建线程时,JVM会为方法创建对应的方法栈,每调用一个方案,会先创建一个栈帧。栈帧中包含了调用方法的局部变量,操作栈,返回值等相关信息。Java栈的栈顶为当前正在执行的栈帧,执行完成后,移除当前的栈帧,之前栈帧作为栈顶(活动栈帧)。
  • 本地方法栈:与Java栈类似,不过本地方法栈为的是native方法服务

Java内存模型图如下

    

Java内存模型主要是描述了Java变量(线程共享变量)的访问规则,以及JVM在存储变量到内存与从内存中读取变量的这样的底层细节。

  • 所有变量都存储在主内存中
  • 每个线程都有自己独立的工作内存,该工作内存为主内存的副本。

那么共享变量是如何实现可见性的?

举例: 线程1更新了变量值a,线程2如何获得更新后的变量值a

  • 把工作内存1中的副本值更新到主内存的共享变量a中。

  • 再从主内存中把共享变量a更新到工作内存2中。

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《Java的内存区域模型与内存模型》的版权归原作者「唯有时光不负你」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注唯有时光不负你微信公众号

唯有时光不负你微信公众号:gh_9927ef449440

唯有时光不负你

手机扫描上方二维码即可关注唯有时光不负你微信公众号

唯有时光不负你最新文章

精品公众号随机推荐

举报