Java内存区域--《深入理解Java虚拟机》学习笔记(一)

程序计数器

程序计数器干嘛的?

有了它,字节码解释器才可以知道下一条要执行的字节码指令是哪个。

无论是取下一条指令还是分支、循环、跳转、中断、线程恢复,都需要这个程序计数器。

程序计数器存在哪?

虚拟机区别于硬件,组成原理里学的程序计数器是用CS和IP寄存器来存,来表示指令地址。

而Java把程序计数器存在内存里。

我好像在操作系统中也听说过程序计数器?

是跟操作系统中的程序计数器有点类似。

在一个时刻,一个处理器只会执行一条线程,HotSpot中使用原生线程模型,OS线程和Java线程1:1映射。

操作系统中,当多个线程轮流切换着执行的时候,每个线程都需要记录自己被中断的位置,以方便恢复线程后能够继续接着执行。

参考操作系统中的线程控制块(TCB),当线程切换时要保存上下文状态,其中就包括指令计数器PC,线程被中断后再切换回来时就知道了从哪里开始继续执行。

Java中也一样,当有多个线程执行时,也是线程间进行轮转,当线程切换回来的时候就需要程序计数器来为该线程指明从哪里开始执行。

所以也就很好理解,Java的程序计数器是‘线程私有的’,每个线程都要有一个。

我听说程序计数器还可以为空?

Java在执行Native方法时,不是Java在工作,而是调用了操作系统中的方法,所以此时不需要Java的程序计数器,此时为空。

既然程序计数器此时为空,Native方法执行完了以后,该回到哪里呢?

http://ms.csdn.net/geek/187200

未完待续。

原文地址:https://www.cnblogs.com/noKing/p/8157608.html

时间: 2024-11-09 00:51:42

Java内存区域--《深入理解Java虚拟机》学习笔记(一)的相关文章

java内存区域——深入理解JVM读书笔记

本内容由<深入理解java虚拟机>的部分读书笔记整理而成,本读者计划连载. 通过如下图和文字介绍来了解几个运行时数据区的概念. 方法区:它是各个线程共享的区域,用于内存已被VM加载的类信息.常量.静态变量.即时编译器编译的代码等数据.JVM规范对这个区域的限制很宽松,如同堆一样不需要连续的内存.可选择固定大小.可扩展的大小外,还可以选择不实现垃圾收集.因为在些区域的垃圾收集必要性不高且效果较差.如果回收也是常量池的回收和类型的卸载,但此操作异常困难.当方法区无法满足内存的分配时,抛OutOfM

Java 内存区域详解

引言 学习Java也有一段时间了,总感觉有些东西学的不是很精通.例如Java内存区域到底是怎么样的?程序是怎么跑的?对象是怎么存放的?这些都影响了我对自己的代码的熟悉程度. 一 运行时数据区域 Java虚拟机在执行java程序的过程中,会把它所管理的内存划分成若干个不同的数据区域(每当运行一个java程序都会启动一个虚拟机).有一本书叫做<Java虚拟机规范>,讲述了Sun公司对Java虚拟机实现的相关规范,其中讲了虚拟机将所管理的内存分为以下几个部分: 程序计数器 虚拟机栈 本地方法区 堆

深入理解java虚拟机系列(一):java内存区域与内存溢出异常

文章主要是阅读<深入理解java虚拟机:JVM高级特性与最佳实践>第二章:Java内存区域与内存溢出异常 的一些笔记以及概括. 好了开始.如果有什么错误或者遗漏,欢迎指出. 一.概述 先上一张图 这张图主要列出了Java虚拟机管理的内存的几个区域. 常有人把Java内存区分为堆内存(Heap)和栈内存(Stack),这种分法比较粗糙,Java内存区域的划分实际上远比这复杂,从上图就可以看出了.堆栈分法中所指的"栈"实际上只是虚拟机栈,或者说是虚拟机栈中的局部变量表部分.接下

《深入理解Java虚拟机》读书笔记---第二章 Java内存区域与内存溢出异常

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来.这一章就是给大家介绍Java虚拟机内存的各个区域,讲解这些区域的作用,服务对象以及其中可能产生的问题. 1.运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域. 1.1程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型中里,字

《深入理解Java虚拟机》读书笔记:Java内存区域

xmind文件下载地址 <深入理解Java虚拟机>读书笔记:Java内存区域,布布扣,bubuko.com

Java虚拟机学习2:Java内存区域及对象

几个计算机的概念 为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念. 1.计算机存储单位 从小到大依次为位Bit.字节Byte.千字节KB.兆M.千兆GB.TB,相邻单位之间都是1024倍,1024为2的10次方,即 1Byte = 8bit,1K = 1024Byte,1M = 1024K,1G = 1024M,1T = 1024G 2.计算机存储元件 寄存器:中央处理器CPU的一部分,是计算机中读写速度最快的存储元件,但是容量很少 内存:属于独立的一个部件,

《深入理解Java虚拟机》笔记02:Java内存区域与内存溢出异常

1.运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间: 有的区域随着虚拟机进程的启动而存在 有些区域则依赖用户线程的启动和结束而建立和销毁 根据<Java虚拟机规范(Java SE 7版)>的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图所示. 1.1 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的

&lt;&lt;深入Java虚拟机&gt;&gt;-第二章-Java内存区域-学习笔记

Java运行时内存区域 Java虚拟机在运行Java程序的时候会将它所管理的内存区域划分为多个不同的区域.每个区域都有自己的用途,创建以及销毁的时间.有的随着虚拟机的启动而存在,有的则是依赖用户线程来启动和销毁. 程序计数器 程序计数器是一块很小的区域,可以看做是用来表示线程所执行到字节码的某一行的行号指示器. 在Java虚拟机中,多线程是线程之间轮流切换并分配处理器的执行时间来实现的,为了线程切换之后能够继续回到之前的代码行继续执行,所以每个线程都有一个“线程私有”的程序计数器. 如果线程正在

2016021801 - Java内存区域学习笔记

根据<深入理解java虚拟机>学习归纳整理学习笔记 程序计数器 用途:当前线程的字节码文件的行号指示器.(当前机场负责控制飞机降落的空管员:当前线程表示当前机场, 所执行的字节码等同于被等待允许降落的飞机,行号指示器好比下达允许降落指令的空管员) 线程私有(每个机场都有属于自己的空管员,不同机场的空管员相互独立,互不影响) 类比:某个机场(线程)负责控制航班降落(被执行的字节码)的空管员(行号指示器): 每个机场都有属于自己的空管员: 异常:没有.(机场有没有飞机降落,飞机降落过程发生故障,和

学习jvm(一)--java内存区域

前言 通过学习深入理解java虚拟机的教程,以及自己在网上的查询的资料,做一个对jvm学习过程中的小总结. 本文章内容首先讲解java的内存分布区域,之后讲内存的分配原则以及内存的监控工具.再下来会着重讲解垃圾回收这一章节,该章节涉及了垃圾的标记算法以及各种垃圾回收算法,然后大概的介绍下市面上使用的垃圾收集器.之后就总结下上面的原理,讲解相关的jvm调优案例.然后会着重讲解类加载过程.最后一章讲字节码的部分,字节码相对来说是比较枯燥而且特别繁琐的内容,最好是自己动手配合着学习会好一点,或者观其大