jvm内存模型

原创 2016年08月30日 11:17:57

       在学习JVM的时候,首先需要了解JVM的构成。然后在学习里面的gc收集器算法、种类等。
jvm内存模型
蓝色的为线程共有,灰色的为线程私有的。

       所谓线程私有,即在jvm运行的过程中,只有有一个线程使用,就会重新生成一套。而线程共有,则jvm一起共用,与线程的数量没有关系。

程序计数器

       多线程时,当线程数超过CPU数量或CPU内核数量,线程之间就要根据时间片轮询抢夺CPU时间资源。因此每个线程有要有一个独立的程序计数器,记录下一条要运行的指令。线程私有的内存区域。如果执行的是JAVA方法,计数器记录正在执行的java字节码地址,如果执行的是native方法,则计数器为空。

虚拟机栈

       线程私有的,与线程在同一时间创建。管理JAVA方法执行的内存模型。每个方法执行时都会创建一个桢栈来存储方法的的变量表、操作数栈、动态链接方法、返回值、返回地址等信息。栈的大小决定了方法调用的可达深度(递归多少层次,或嵌套调用多少层其他方法,-Xss参数可以设置虚拟机栈大小)。栈的大小可以是固定的,或者是动态扩展的。如果请求的栈深度大于最大可用深度,则抛出stackOverflowError;如果栈是可动态扩展的,但没有内存空间支持扩展,则抛出OutofMemoryError。

本地方法区

       和虚拟机栈功能相似,但管理的不是JAVA方法,是本地方法,本地方法是用C实现的。

       线程共享的,存放所有对象实例和数组。垃圾回收的主要区域。可以分为新生代和老年代(tenured)。
       新生代用于存放刚创建的对象以及年轻的对象,如果对象一直没有被回收,生存得足够长,老年对象就会被移入老年代。
       新生代又可进一步细分为eden、survivorSpace0(s0,from space)、survivorSpace1(s1,to space)。刚创建的对象都放入eden,s0和s1都至少经过一次GC并幸存。如果幸存对象经过一定时间仍存在,则进入老年代(tenured)。

方法区

       线程共享的,用于存放被虚拟机加载的类的元数据信息:如常量、静态变量、即时编译器编译后的代码。也成为永久代。如果hotspot虚拟机确定一个类的定义信息不会被使用,也会将其回收。回收的基本条件至少有:所有该类的实例被回收,而且装载该类的ClassLoader被回收

JVM的类装载流程

       分为三个步骤,加载、链接、初始化,如图
jvm的类加载机制

       小结:JVM的内部组成和各个部分的作用已经做了简单介绍,接下来的文章会对其部分内容进行详细的分析,敬请关注~~~

版权声明:本文为博主原创文章,未经博主允许不得转载。

JVM内存模型和垃圾收集

看《深入理解Java虚拟机》,所作读书笔记。 一、JVM体系结构 二、JVM运行时数据区 堆的划分 三、对象是否可以回收 1、引用计数算法 2、可达性分析算法 GC Roots的对象包括以...
  • u012387062
  • u012387062
  • 2015年10月25日 21:44
  • 1327

【理解JVM】JVM内存模型

JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出时销毁。 ...
  • moshenglv
  • moshenglv
  • 2016年07月25日 20:32
  • 1744

JVM初探 -JVM内存模型

JVM是每个Java开发每天都会接触到的东西, 其相关知识也应该是每个人都要深入了解的. 但接触了很多人发现: 或了解片面或知识体系陈旧. 因此最近抽时间研读了几本评价较高的JVM入门书籍, 算是总结...
  • hanqing280441589
  • hanqing280441589
  • 2016年12月02日 18:47
  • 10333

【JVM】jvm内存模型及分区

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结...
  • u013046597
  • u013046597
  • 2017年06月11日 21:46
  • 455

JVM内存模型及分区

Java虚拟机在程序执行过程会把jvm的内存分为若干个不同的数据区域来管理,这些区域有自己的用途,以及创建和销毁时间。 jvm管理的内存区域包括以下几个区域: 栈区: 栈分为java虚拟机栈和本...
  • tsdfk1455
  • tsdfk1455
  • 2016年05月30日 23:43
  • 5822

jvm内存模型(运行时数据区)

原文:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.5运行时数据区(runtime data area...
  • u012941811
  • u012941811
  • 2016年08月31日 18:55
  • 410

JVM内存模型,以及JVM性能调优

转载批注:最近因与别人讨论问题时,问到JVM内存模型,但是苦于只知道JVM的大概内容,不知道详细,也罢,近期会逐渐有充足的自己的时间,好好整理学习学习。以下内容为转载别人的资料,个人认为写的很好,就全...
  • xzknet
  • xzknet
  • 2015年03月11日 12:03
  • 3930

面试知识点4:JVM内存模型

注:JVM中只有一个PC寄存器,没有其他寄存器。相关的信息都保存在调用栈中。每个线程都有自己的PC寄存器。...
  • RoxLiu
  • RoxLiu
  • 2017年04月07日 11:40
  • 1081

jvm内存模型简单描述

jvm内存主要分为五个部分:方法区,java堆,java栈,程序计数器,本地方法栈。 方法区: 存储被虚拟机加载的类信息,常量,静态常量,静态方法,运行时常量池等。 (1)用于存储已被虚拟机加载的类信...
  • liudezhicsdn
  • liudezhicsdn
  • 2016年03月27日 22:13
  • 589

深入理解JVM(一)——JVM内存模型

JVM内存模型Java虚拟机(Java Virtual Machine=JVM)的内存空间分为五个部分,分别是: 1. 程序计数器 2. Java虚拟机栈 3. 本地方法栈 4. 堆 5. ...
  • u010425776
  • u010425776
  • 2016年04月16日 20:58
  • 13200
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jvm内存模型
举报原因:
原因补充:

(最多只允许输入30个字)