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内存区域模型 1.方法区 也称"永久代” 、“非堆”,  它用于存储...
  • yztezhl
  • yztezhl
  • 2016年09月08日 14:59
  • 207

JVM学习笔记(一)——内存模型

对于Java程序员来说,他们相比C++程序员最幸福的一点就是不用自己管理内存,内存的分配和回收都由虚拟机完成。然而,正是由于该原因,一旦虚拟机内存管理出现问题,比如出现内存泄漏或溢出,排查起来将是非常...

JVM学习笔记——java内存模型与线程(2)

Java与线程并发不一定要依赖多线程(如PHP中很常见的多进程并发),但是在Java里面谈论并发,大多数都与线程脱不开关系。线程的实现线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资...

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

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

JVM内存模型(深入理解Java虚拟机学习笔记)

Java虚拟机(Java virtualmachine)实现了Java语言最重要的特征:即平台无关性。 平台无关性原理:.Java文件经过Java Compiler编译成为.Class文件。编译...

【Java虚拟机】之一Java运行数据区域

概述:     对于从事java程序开发的人来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄漏和内存溢出问题,由虚拟机管理内...

JVM学习笔记——java内存模型与线程(1)

概述多任务处理出现的重要原因是计算机的运算速度与存储及通信子系统的速度差距太大,大量的时间花费在磁盘I/O,数据库访问或者数据库访问上。除了充分利用计算机处理器的能力外,一个服务端同时对多个客户端提供...

JVM学习篇(3)之Java内存模型与线程

Java内存模型与线程 内存模型(规定多线程对共享变量的使用规则) 模型 目的:定义程序中各个变量的访问规则 1.        所有变量都存储在主内存在。 2.        ...

java学习(5),JVM内存模型以及GC回收算法

1.JVM的作用java源文件通过编译器,能够产生对应的class文件,也就是字节码文件。这个字节码文件通过JVM中的计时器,编译成机器码。最终实现的目的是能够不区分平台而去执行,不论是linux,w...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JVM内存模型学习
举报原因:
原因补充:

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