Java线程执行native方法时程序计数器为空,如何确保native执行完后的程序执行的位置
前言
今天在看深入理解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执行完后的程序执行的位置相关推荐
- java线程中join方法的简单讲解
一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并发执行变为串行执行.具体看代码: public class Test {public static void main ...
- Java——线程插队_join ()方法来实现“插队功能”
在 Thread 类中提供了一个 join ()方法来实现"插队功能".当在某个线程中调用其他线程的 join ()方法时,调用的线程将被阻塞,直到被 join ()方法加入的线程 ...
- Java中重写equals()方法时注意点
Java中重写equals()方法时注意点 一直说,重写一个对象的equals()方法时我们必须重写HashCode()方法,但是如果我们不重写呢?会有什么影响呢? 首先看一下,什么情况下我们需要重写 ...
- Java:使用split方法时忽略中英文的符号区别
Java:使用split方法时忽略中英文的符号区别 split(",|,")
- springboot反射执行private方法@Autowired字段为空
springboot反射执行private方法@Autowired字段为空 描述 错误复现 controller service ReflectServiceImpl ReflectCallServi ...
- JVM - 结合代码示例彻底搞懂Java内存区域_线程栈 | 本地方法栈 | 程序计数器
文章目录 Pre 运行时数据区总览 线程栈 概要 栈内部主要组成部分 局部变量 操作数栈 动态链接 方法出口 小结 程序计数器 本地方法栈 附 测试demo javap JVM字节码指令集手册 Pre ...
- java 线程同步的方法_Java多线程同步方法
Java多线程同步方法 package com.wkcto.intrinsiclock; /** * synchronized同步实例方法 * 把整个方法体作为同步代码块 * 默认的锁对象是this对 ...
- JAVA线程两种方法内存,JAVA线程基础回顾及内存模型(一)
线程创建的两种方式 继承Thread类 class MyThread extends Thread{ ...... @Override public void run(){ ...... } } My ...
- java线程三种方法,Java基础_线程的使用及创建线程的三种方法
线程:线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 进程:进 ...
- Java线程池execute()方法源码解析
先看作者给出的注释来理解线程池到底有什么作用 * Thread pools address two different problems: they usually * provide improve ...
最新文章
- 2021年大数据ELK(二):Elasticsearch简单介绍
- 疫情当下,你是在家里躺着刷抖音?还是在做这些?
- 求两个datetime之间相差的天数
- Centos6.6下安装配置Redmine详解
- 产业为主谋定共享运行-农业大健康·万祥军:特色化小镇时代
- 深入学习Mybatis框架(二)- 进阶
- input在iOS里的兼容性
- Python注释风格--Google风格
- Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(6) - 逻辑指令 比较指令
- stats | 概率分布与随机数生成(一)——离散型分布
- 经典代码d359f1d82912ef1b1cd784bd28829325
- python 爬取 谷歌以及百度图片
- hexo+yilia添加背景音乐
- 与老公的情人同居一室很尴尬
- vivos9保密柜从哪里进
- SISO/MIMO信道估计(channel estimation)原理详细图解
- java 里面耦合和解耦
- VS2015 编译开源的基于Opencascade的3D查看器Mayo
- yarn 报错 文件名、目录名或卷标语法不正确
- MEM/MBA数学强化(08)数据分析