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的内部组成和各个部分的作用已经做了简单介绍,接下来的文章会对其部分内容进行详细的分析,敬请关注~~~

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

相关文章推荐

java中四种引用类型

⑴强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使...

git 总结

1.git 从远程库覆盖本地文件 git fetch --all  git reset --hard origin/master

Java 虚拟机JVM内存模型

  • 2014年06月20日 14:59
  • 2.26MB
  • 下载

JVM内存模型

  • 2013年06月08日 21:54
  • 141KB
  • 下载

JVM内存模型及垃圾回收机制

JVM内存模型 1、栈 Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。存储局部变量、引用、方法、返回值等。 StackOverflowError:如果在线程执...

深入理解Java虚拟机学习笔记-1.JVM内存模型

JVM内存模型1.内存模型结构图 名称 特征 作用 配置参数 异常 程序计数器 占用内存小,线程私有, 生命周期与线程相同 大致为字节码行号指示器 无 无 虚...
  • cnwuhao
  • cnwuhao
  • 2017年07月27日 20:00
  • 207

【Java高级】JVM内存区域模型和加载过程

JVM内存区域模型    1.方法区 也称"永久代” 、“非堆”,  它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB,最大值为64MB,可以通过-XX...

JVM内存、堆模型、垃圾回收器总结

全栈进行时 2017-10-24 15:18 JVM8内存 包括:堆、栈、元数据区、本地方法栈、程序记数寄存器 需要注意的是,JDK8中已经用Metaspace(元数据区)完全替代了永久代(即方...

JVM内存模型及垃圾收集

一 JVM内存模型 1.1 Java栈 Java栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。它主要用来存储线程执行过程中的局部变量,方法的返回值,以及方...

java 图解JVM内存模型

Java 的内存模型由3个代组成,各个代的默认排列有如下图(适用JDK1.4.*  到 JDK6): Java 的内存模型分为 Young(年轻代) Tenured(终身代) Perm(...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jvm内存模型
举报原因:
原因补充:

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