JVM 内存模型简单分析

作者: Only凹凸曼 | 来源:发表于2016-11-14 15:45 被阅读82次

背景

说是简单分析,不如说是一个笔记,写这篇文章完全是处于自己脑子不好使,总是记不住JVM的内存模型,对他的概念一直很模糊,今天终于忍不住,觉得写一篇文章来彻底记住他。(部分来自网上其他作者,我做了个汇总,在此表示感谢!)

模型图

简易内存模型图

简单分析

  1. 程序计数器
    多线程时,当线程数超过CPU数量或CPU内核数量,线程之间就要根据时间片轮询抢夺CPU时间资源。因此每个线程有要有一个独立的程序计数器,记录下一条要运行的指令。线程私有的内存区域。如果执行的是JAVA方法,计数器记录正在执行的java字节码地址,如果执行的是native方法,则计数器为空。
  2. 虚拟机栈
    线程私有的,与线程在同一时间创建。管理JAVA方法执行的内存模型。每个方法执行时都会创建一个桢栈来存储方法的的变量表、操作数栈、动态链接方法、返回值、返回地址等信息。栈的大小决定了方法调用的可达深度(递归多少层次,或嵌套调用多少层其他方法,-Xss参数可以设置虚拟机栈大小)。栈的大小可以是固定的,或者是动态扩展的。如果请求的栈深度大于最大可用深度,则抛出stackOverflowError;如果栈是可动态扩展的,但没有内存空间支持扩展,则抛出OutofMemoryError(你说看不明白??OK,简单来说就是虚拟机执行Java方法的重要内存模型。内部有一个局部变量表,这个表存储了对象引用,这个局部变量表常被我们成为栈)
  3. 本地方法区
    和虚拟机栈功能相似,但管理的不是JAVA方法,是本地方法,本地方法是用C实现的* 这个对于我们Android程序猿来说基本可以忽略*。
  4. JAVA堆
    线程共享的,存放所有对象实例和数组。(比如 AAA a=new AAA(),那么 a这个引用就保存在上面的局部变量表中,而new AAA() 的这个对象就放在堆中
    垃圾回收的主要区域。可以分为新生代和老年代(tenured)。新生代用于存放刚创建的对象以及年轻的对象,如果对象一直没有被回收,生存得足够长,老年对象就会被移入老年代。新生代又可进一步细分为eden、survivorSpace0(s0,from space)、survivorSpace1(s1,to space)。刚创建的对象都放入eden,s0和s1都至少经过一次GC并幸存。如果幸存对象经过一定时间仍存在,则进入老年代(tenured)。
    堆空间堆空间
  5. 方法区
    线程共享的,用于存放被虚拟机加载的类的元数据信息:如常量、静态变量、即时编译器编译后的代码。也称为永久代。如果hotspot虚拟机确定一个类的定义信息不会被使用,也会将其回收。回收的基本条件至少有:所有该类的实例被回收,而且装载该类的ClassLoader被回收

相关文章

  • JVM内存模型(jvm 入门篇)

    概述 jvm 入门篇,想要学习jvm,必须先得了解JVM内存模型,JVM内存模型,JVM内存模型,JVM内存模型,...

  • JVM 内存模型简单分析

    背景 说是简单分析,不如说是一个笔记,写这篇文章完全是处于自己脑子不好使,总是记不住JVM的内存模型,对他的概念一...

  • java进程和普通进程在内存管理上区别于联系

    Linux与JVM的内存关系分析 在这篇文章中: 引言 一、Linux与进程内存模型 二、进程与JVM内存模型1....

  • Java基础之内存模型

    Java基础之内存模型 目录 Java内存模型简单介绍 JVM介绍 存储方式 并发原因 Java内存模型与系统内存...

  • JVM内存模型及JIT运行优化

    JVM内存模型定义 JVM不仅承担了Java字节码的分析(JIT)和执行(Runtime),同时也内置了自动内存分...

  • JVM

    栈容量由-Xss指定深入理解JVM—JVM内存模型 JVM内存模型和JVM参数的关系

  • [Java多线程编程之八] Java内存模型

    一、Java内存模型 == JVM内存模型?   很多人都会认为Java内存模型就是JVM内存模型,但实际上是错的...

  • jvm浅析

    一 、jvm 内存模型 作用:JVM不仅承担了Java字节码的分析(JIT compiler)和执行(Runtim...

  • JVM问题及解答

    常见JVM问题 JVM内存模型,GC机制和原理。注意JVM内存模型与Java内存模型(JMM)不是同一个东西。JV...

  • JAVA对象在JVM中内存分配

    如果你还不了解JVM内存模型的建议您先看下JVM内存模型 以一下代码为例,来分析下,java的实例对象在内存中的空...

网友评论

    本文标题:JVM 内存模型简单分析

    本文链接:https://www.haomeiwen.com/subject/namhpttx.html