前言

今天在看深入理解Java虚拟机这本书的时候,里面有这句话,如果正在执行的是Native方法,这个计数器值为空(Ubdifined)。

看完之后有一点不理解,native方法执行时,程序计数器为空,那执行后,怎么确保接下来执行的位置?这个问题查看了一些资料,在这里参考R大的回答做一个小总结。

R大的回答:https://www.zhihu.com/question/40598119/answer/87381512

正文

首先我们来看一下在JVM规范中,这句话是怎么形容的

If the method currently being executed by the thread is native, the value of the Java Virtual Machine's pc register is undefined

翻译过来就是如果一个线程执行的是Native方法,Java虚拟机中程序计数器的值未定义

在程序计数器的定义中,程序计数器存放的是Java字节码的地址,而native方法的方法体是非Java的,所以程序计数器的值才未定义。

那在native方法执行后,线程又如何确保下一次执行的位置?

这是因为每个Java线程都直接映射到一个OS线程上执行。所以native方法就在本地线程上执行,无需理会JVM规范中的程序计数器的概念。仔细看一下JVM规范,如果一个线程执行Native方法,程序计数器的值未定义,可不是一定为空,任何值都可以。native方法执行后会退出(栈帧pop),方法退出返回到被调用的地方继续执行程序。

Tip: OS意思是操作系统(Operating System)的简写。

Java线程执行native方法时程序计数器为空,如何确保native执行完后的程序执行的位置相关推荐

  1. java线程中join方法的简单讲解

    一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并发执行变为串行执行.具体看代码: public class Test {public static void main ...

  2. Java——线程插队_join ()方法来实现“插队功能”

    在 Thread 类中提供了一个 join ()方法来实现"插队功能".当在某个线程中调用其他线程的 join ()方法时,调用的线程将被阻塞,直到被 join ()方法加入的线程 ...

  3. Java中重写equals()方法时注意点

    Java中重写equals()方法时注意点 一直说,重写一个对象的equals()方法时我们必须重写HashCode()方法,但是如果我们不重写呢?会有什么影响呢? 首先看一下,什么情况下我们需要重写 ...

  4. Java:使用split方法时忽略中英文的符号区别

    Java:使用split方法时忽略中英文的符号区别 split(",|,")

  5. springboot反射执行private方法@Autowired字段为空

    springboot反射执行private方法@Autowired字段为空 描述 错误复现 controller service ReflectServiceImpl ReflectCallServi ...

  6. JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器

    文章目录 Pre 运行时数据区总览 线程栈 概要 栈内部主要组成部分 局部变量 操作数栈 动态链接 方法出口 小结 程序计数器 本地方法栈 附 测试demo javap JVM字节码指令集手册 Pre ...

  7. java 线程同步的方法_Java多线程同步方法

    Java多线程同步方法 package com.wkcto.intrinsiclock; /** * synchronized同步实例方法 * 把整个方法体作为同步代码块 * 默认的锁对象是this对 ...

  8. JAVA线程两种方法内存,JAVA线程基础回顾及内存模型(一)

    线程创建的两种方式 继承Thread类 class MyThread extends Thread{ ...... @Override public void run(){ ...... } } My ...

  9. java线程三种方法,Java基础_线程的使用及创建线程的三种方法

    线程:线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 进程:进 ...

  10. Java线程池execute()方法源码解析

    先看作者给出的注释来理解线程池到底有什么作用 * Thread pools address two different problems: they usually * provide improve ...

最新文章

  1. 2021年大数据ELK(二):Elasticsearch简单介绍
  2. 疫情当下,你是在家里躺着刷抖音?还是在做这些?
  3. 求两个datetime之间相差的天数
  4. Centos6.6下安装配置Redmine详解
  5. 产业为主谋定共享运行-农业大健康·万祥军:特色化小镇时代
  6. 深入学习Mybatis框架(二)- 进阶
  7. input在iOS里的兼容性
  8. Python注释风格--Google风格
  9. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(6) - 逻辑指令 比较指令
  10. stats | 概率分布与随机数生成(一)——离散型分布
  11. 经典代码d359f1d82912ef1b1cd784bd28829325
  12. python 爬取 谷歌以及百度图片
  13. hexo+yilia添加背景音乐
  14. 与老公的情人同居一室很尴尬
  15. vivos9保密柜从哪里进
  16. SISO/MIMO信道估计(channel estimation)原理详细图解
  17. java 里面耦合和解耦
  18. VS2015 编译开源的基于Opencascade的3D查看器Mayo
  19. yarn 报错 文件名、目录名或卷标语法不正确
  20. MEM/MBA数学强化(08)数据分析

热门文章

  1. Android 签名时 v2 与 v1 的选择
  2. OPPO小布助手算法系统的探索、实践与思考
  3. 温度传感器的类型原理特点和应用
  4. 腾讯云数据库 TDSQL—— 私有云安装部署手册
  5. 用AD9画51单片机的最小系统
  6. AD9的PCB技巧——封装的更新
  7. LabVIEW编程LabVIEW开发 控制雷赛运动控制器SMC604A例程与相关资料
  8. IT程序员编程工具利器-辅助编程神器
  9. kettle教程-Windows下安装及简单使用
  10. 关于SpringBoot对junit4/junit5的整合