JVM内存模型学习

原创 2016年08月28日 21:18:36
工作好几年了,第一次写博客,主要是最近学习下来,看过的东西如果不及时记录下来,则容易忘掉。所以记录在此,备忘!文采不好,有写的不对的地方,请大家及时批评指正,谢谢!
JVM内部分成5个区域:
    1):程序计数器;
    2):虚拟机栈;
    3):本地方法栈;
    4):方法区;
    5):堆;
1:程序计数器
    程序计数器是一块空间较小的内存,也是线程私有的内存。如果线程正在执行的是java方法,则计数器记录的是正在执行的虚拟机字节码指令的地址,如果是native方法,则计数器的值为空。程序计数器的内存区域是唯一一个在java虚拟机规范中没有定义任何OutOfMemory异常情况的区域。
2:虚拟机栈
    虚拟机栈也是线程私有的,生命周期与线程相同,虚拟机栈描述的是java方法的内存模型,每个方法的执行虚拟机都会创建一个叫栈桢的东西,栈桢里存放着这个方法中局部变量表,方法出口等一些方法信息。每个方法的调用与返回都伴随着栈桢的创建入栈和出栈。栈桢的局部变量表中存放着各种编译期知道的基本数据类型、对象引用等。
    虚拟机栈中有两种常见的异常:
        a:StackOverflowError:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出此异常。
        b:OutOfMemoryError: 如果线程的栈是可动态扩展的,但当动态扩展申请的内存不足时,将抛此异常。
3:本地方法栈:
    此内存区域和虚拟机栈的作用基本相同,不同的是,本地方法栈是native方法,虚拟机栈是java方法。有的虚拟机已经将这两个区域合并。
4:Java堆
    Java堆是jvm中最大的一个内存块,并且很多时候jvm的知识都是围绕这个java堆来进行的。java堆与栈不同,堆是所有线程共享的一块内存区域。它的作用主要是用来存放我们程序中产生的对象。
    目前比较流行的jvm虚拟机在垃圾回收中都使用分代收集算法,所以java堆一般都可以细分为:新年代和老年代。
    新年代还可以分为Eden空间、From Survivor、To Survivor空间。新对象刚被创建的时候一般会被分配到Eden空间,当经过一次垃圾回收时,会被分配到From Survivor或者To Survivor空间。当经过一定次数的垃圾回收后,对象依然还存在的话就会被分配到老年代空间。关于对象的分配以及垃圾回收,后面的文章有时间会更加的详细阐述,这里就不深入分析了。

5:方法区
    方法去也是所有线程共享的一块内存区域,用于存储虚拟机已经加载的类的信息、常量、静态变量、以及及时编译器编译后的代码数据。
    运行常量池是方法去的一部分,用于存放编译期生成的各种字面量和符号引用!不仅仅在编译期可以将变量放入常量池,在运行期同样也可以,类似于String.intern().

以上是jvm虚拟机最基本的5个分区简单总结,若有错误欢迎拍砖。之后将更加深入的了解几个重要的分区。

JVM内存模型和垃圾收集

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

JVM内存模型及分区

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

【理解JVM】JVM内存模型

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

JVM初探 -JVM内存模型

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

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
  • 406

【JVM】jvm内存模型及分区

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

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

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

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

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

jvm内存模型简单描述

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

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

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

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