码迷,mamicode.com
首页 > 其他好文 > 详细

理解JMM及volatile关键字

时间:2019-12-31 12:28:46      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:理解   一个   inf   strong   oom   src   行号   调用   java虚拟机   

一、Java内存区域

从《深入理解Java虚拟机》一书中知道

技术图片

1. 程序计数器

 

   当前线程的行号指示器,JVM多线程的方式,导致了线程在被挂起到重新获取执行权时,需要知道上次挂起的地方在哪。在JVM中,

通过程序计数器来记录字节码的执行位置。程序计数器具有隔离性,为线程私有。此区域不会发生OOM。

2. Java虚拟机栈

  Java虚拟机栈描述的是Java方法执行的内存模型:每一个方法执行时将创建一个栈帧,存储局部变量表、方法出口等信息。每一个方

法从调用到执行完成,对应的是栈帧的入栈出栈的过程。

  局部变量存储基本类型、对象引用和returnAddress类型。局部变量包括boolean、byte、char、short、int、float、long、double,其中

long和double占两个局部变量空间,其余的占一个。对象引用可以是对象的引用指针,也可以是对象的句柄或者与此对象相关的地址。

  Java虚拟机栈为线程私有。

3. 本地方法栈

       线程私有,这部分存放虚拟机调用的Native方法,一般情况下,我们无需关心。

4. Java堆

  Java堆的唯一目的就是存储对象实例,是线程的共享区域。

  Java堆是垃圾收集器管理的主要区域,因此又称为“GC堆”。从内存回收的角度,又分为:新生代和老年代,再细致一点,又分为:

Eden空间、From Survivor空间、To Survivor空间。如果堆中没有内存完成实例分配,并且堆无法扩展,将会OOM。

5. 方法区

  

理解JMM及volatile关键字

标签:理解   一个   inf   strong   oom   src   行号   调用   java虚拟机   

原文地址:https://www.cnblogs.com/bloodthirsty/p/12123718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!