JVM在运行时,内存区域中属于程序私有的区域包括:程序计数器、虚拟机栈、本地方法栈。本片文章主要理解程序计数器的相关概念以及工作原理。

一、什么是程序计数器

程序计数器是记录着当前线程所执行的字节码的行号指示器。

二、为什么需要程序计数器

Java在编译后的字节码未经过JIT(实时编译器)编译前,其执行方式是通过“字节码解释器”解释执行。可以简单理解为解释器读取装入内存的字节码,按照顺序读区字节码指令,并翻译成指定的操作,并根据这些操作进行计算、跳转、循环等操作。

从上面的描述,可以怀疑程序计数器还有必要吗?如果程序永远只有一个线程,指令按顺序执行即可,确实程序计数器没有存在的必要。但是Java程序是多线程协同合作执行的,而JVM的多线程是通过CPU的时间片轮转算法实现,也就是说线程可能还没有执行完,但是由于时间片耗尽,不得不挂起,等待下次分配时间片,才能继续执行。所以需要计数器记住被挂起时,程序执行的位置。

三、程序计数器的特点

1、每个线程私有一个程序计数器。

2、程序计数器的值为对应线程执行字节码指令的地址。

3、执行native本地方法时,程序计数器的值为空(Undefined)。因为native方法是java通过JNI直接调用本地C/C++库,可以近似的认为native方法相当于C/C++暴露给java的一个接口,java通过调用这个接口从而调用到C/C++方法。由于该方法是通过C/C++而不是java进行实现。那么自然无法产生相应的字节码,并且C/C++执行时的内存分配是由自己语言决定的,而不是由JVM决定的。

4、程序计数器占用内存空间很小,几乎可以忽略不计。

5、唯一一个无OOM的区域

JAVA程序计数器理解相关推荐

  1. 从Java代码到Java堆理解和优化您的应用程序的内存使用

    从Java代码到Java堆理解和优化您的应用程序的内存使用 简介: 本文将为您提供 Java? 代码内存使用情况的深入见解,包括将 int 值置入一个Integer 对象的内存开销.对象委托的成本和不 ...

  2. JVM面试1 :谈谈你对Java的理解

    谈谈你对Java的理解 如何查看字节码? 使用 javap

  3. Java——深入理解Java异常体系

    Java--深入理解Java异常体系 参考文章: (1)Java--深入理解Java异常体系 (2)https://www.cnblogs.com/wugongzi/p/11858228.html 备 ...

  4. 谈谈你对Java的理解

    谈谈你对Java的理解 这个考察的很宽泛,答案不是唯一的,往往考察多个方面,其实这个问题考察的是你是否真的掌握了Java,对基础知识点的理解是否真的很清楚.是否掌握主要的模块和运行 原理等,同时也会对 ...

  5. 谈谈你对java的理解,java是“解释执行”这句话对吗?

    谈谈你对java的理解,java是"解释执行"这句话对吗? 先科普下什么是"解释执行"? 什么是"编译执行"? • 解释执行 解释执行时高级 ...

  6. Java 深入理解深拷贝和浅拷贝区别

    title: Java 深入理解深拷贝和浅拷贝区别 date: 2021-6-19 updated: 2021-6-19 tags: Java 深拷贝和浅拷贝 categories: 面试 Java ...

  7. java 程序计数器_Java中的程序计数器是什么

    程序计数器是当前线程正在执行的字节码的地址.程序计数器是线程隔离的,每一个线程在工作的时候都有一个独立的计数器. JAVA虚拟机管理的内存区域图 1.什么是程序计数器? 程序计数器是当前线程正在执行的 ...

  8. Java虚拟机理解-内存管理

    运行时数据区域 jdk 1.8之前与之后的内存模型有差异,方法区有变化(https://cloud.tencent.com/developer/article/1470519). java的内存数据区 ...

  9. java 程序计数器 堆_Java JVM中程序计数器有什么作用?

    我们都知道虚拟机的内存划分了多个区域,并不是一张大饼.那么为什么要划分为多块区域呢,直接搞一块区域,所有用到内存的地方都往这块区域里扔不就行了,岂不痛快.是的,如果不进行区域划分,扔的时候确实痛快,可 ...

最新文章

  1. Php的if自动转换类型,php输出数据字段类型自动转换函数
  2. 12行代码AC——例题6-6 小球下落(Droppint Balls, UVa 679)——解题报告
  3. gtw-050090|执行拦截器时发生异常_执行流程 | 你真的了解Spring AOP的执行顺序吗?...
  4. 美国虚拟主机大打安全牌争抢国内高端外贸主机市场
  5. Linux系统简单实验操作rm
  6. Unix环境高级编程(十九)终端I/O
  7. mongodb安装指南 及使用
  8. RPGViewer - 档案文件格式概述
  9. 初探linux子系统集之led子系统(三)【转】
  10. K8S(二)安装配置篇
  11. 直播:全能项目经理 - 设计篇(2015-2-16)
  12. 如何用计算机控制家带你开关,kg316t微电脑时控开关怎么调 微电脑时控开关设置方法【图文】...
  13. PS朋友们有福了 PhotoShop CS2 最新汉化补丁出炉
  14. 饭桌的威力,辛酸的父母。
  15. 安卓开发工程师职业发展规划
  16. 数据通信原理——第二章(数据信号的传输)备考自用
  17. Python3.5 函数的调用
  18. 《逆向工程核心原理》学习笔记 破解abex' crackme #1
  19. Linux系统中的文件传输(scp和rsync命令的使用)
  20. mybatis-paginator分页工具的使用简述

热门文章

  1. 计算机基础知识宣讲心得体会,有关计算机基础的心得体会
  2. 华为成立四大军团,字节开启今年第2次回购,1年半回报率近300%
  3. 免费pdf转换器推荐,现在收藏还不晚!
  4. 基于5G技术的低轨卫星物联网技术
  5. 台湾中央大学与德昂信息产学合作签约仪式
  6. 使用SQL Server分析2020全国大学生数学竞赛河南赛区结果
  7. TiDB学习笔记【初阶】
  8. vs 选定内容没有属性页_【产品分析】从搜索功能看产品定位:抖音VS快手
  9. c++ 结构体遍历_二叉树(Binary Tree)的建立与遍历——C语言实现
  10. EQ均衡器中的G 、Q、FC与截止频率知识