深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理解Java虚拟机 >(周志明著)读书笔记. Java程序员一般都知道JVM中存在栈和堆的,并简单了解对象是在堆上分配的,这点从C/C++转过Java的程序员很容易想到.但Java由于其自身的特性,还有一些其他的内存区域,如下图所示: 程序计数器 程序计数器占用的内存空间不大,里面记录了各线程当前字节码的…
上面已经聊过JVM是什么东东,也谈过了JVM内存的垃圾回收机制.这一篇博客我们来聊聊JVM运行时数据区域. JVM运行时数据区域由5块部分组成,分别是堆,方法区,栈,本地方法栈,以及程序计数器组成. 可以根据内存是否线程共享划分成线程独享内存区域/线程共享内存区域. 我们从简单的部分开始吧 1.程序计数器 特点:线程内存独享,占用内存小,生命周期与线程相同(随线程诞生而诞生,随线程消亡而消亡) 功能:当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里字节码解释器工作时就是通过改变这个计数器…
目录 前言 什么是JVM JRE/JDK/JVM是什么关系 JVM执行程序的过程 JVM的生命周期 JVM垃圾回收 JVM的内存区域划分 一.运行时数据区包括哪几部分? 二.运行时数据区的每部分到底存储了哪些数据? 1.程序计数器 2.Java栈 3.本地方法栈 4.堆 5.方法区 6.元空间(Metaspace) JDK1.8 JVM运行时数据区域概览 直接内存 前言 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远…
第一章 走近java 1. java 技术体系: java 程序设计语言 各种硬件平台上的java虚拟机 class 文件格式 java API 类库 来自商业机构或者开源机构的第三方java类库 jdk(java development kit):java程序设计语言.java虚拟机.java API类库,表示用于支持java开发的最小环境 jre(java runtime environment),java 运行时环境.   java me (mobile edition,移动版本) jav…
第二章:Java内存区域和内存溢出异常 2.2运行时数据区域 运行时数据区分为方法区,堆,虚拟机栈,本地方法栈,程序计数器 方法区和堆是线程共享的区域 虚拟机栈,本地方法栈,程序计数器是数据隔离的数据区 2.2.,程序计数器,即PC,本质是一块较小的内存区域.可以看做当前线程所执行的字节码的行号指令器 有了它可以实现字节码指令,分支,循环.跳转.异常处理,线程恢复 每个线程有一个单独的PC,各个线程之间不互相影响,独立存储 如果执行的方法是java方法,计数器记录的是正在执行的虚拟机字节码指令的…
Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随线程的开始和结束而创建和销毁. Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 1 程序计数器 它是一块较小的内存空间,它的作用可以看做是当先线程所执行的字节码的信号指示器. java虚拟机的多线程是通过轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多…
一.运行时数据区域 1.程序计数器 程序计数器( Program Counter Register) 是一块较小的内存空间, 它可以看作是当前线程所执行的字节码的行号指示器. Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻, 一个处理器( 对于多核处理器来说是一个内核) 都只会执行一条线程中的指令. 因此, 为了线程切换后能恢复到正确的执行位置, 每条线程都需要有一个独立的程序计数器, 各条线程之间计数器互不影响, 独立存储, 我们称这类内存区域…
参考文章: <Java Se11 虚拟机规范> <深入理解Java虚拟机-JVM高级特性与最佳实践 第3版>- 周志明 本文基于Java Se 11讲解. 根据<Java虚拟机规范>的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域: 对于不同的虚拟机实现,在运行时数据区的实现上并不完全相同.对于常用的HotSpot虚拟机来说,它的运行时数据区如下: 主要区别在于,HotSpot使用了直接使用本地内存(即机器本身内存)的元空间(metaspace)来实现方…
了解虚拟机是怎么使用内存的,有助于我们解决和排查内存泄漏和溢出方面的问题.详解java虚拟机内存的各个区域,分析这些区域的作用服务对象以及可能发生的问题. 一.运行时数据区域 java虚拟机在执行java程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域.这些数据区域都有各自的用途,以及创建时间和销毁时间.有的随着虚拟机进程的而存在,有些区域则依赖用户线程的启动和结束而建立和销毁.根据java虚拟机的规范,jvm管理的内存将包括以下几个运行时数据区域. 1.1 程序计数器 程序计数器是…
Java虚拟机管理的内存包括以下几个运行时数据区域: 1.程序计数器: 程序计数器是一块比较小的内存空间,是当前线程执行的字节码行号指示器.Java多线程是通过线程轮流切换来实现的,所以每个线程都有一个自己独立的程序计数器,各个线程的程序计数器互补干扰. 2.Java虚拟机栈 Java虚拟机栈描述的是Java方法的执行模型:每个方法执行的时候都会创建一个帧栈用于存放局部变量表,操作栈,动态链接,方法出口等信息.一个方法的执行过程,就是这个方法对于帧栈的入栈出栈过程. 3.本地方法栈 本地方法栈与…