JVM执行native方法,计数器为空(undefined),又怎么继续执行Java代码的问题?

Posted lay2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM执行native方法,计数器为空(undefined),又怎么继续执行Java代码的问题?相关的知识,希望对你有一定的参考价值。

在Java的自动内存分配中,我们看到一句话:

如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是native方法,这个计数器值则是为空(undefined)

问题:

我们知道,程序计数器用来存放字节码指令地址;通过这个地址,虚拟机就能知道执行到哪里,以及怎么往下执行,可调用native方法,值就变成空了,那么机器不就直接崩溃了吗?

解释:

参考C++理解是:当线程中调用native方法的时候,则重新启动一个新的线程,那么新的线程的计数器为空则不会影响当前线程的计数器,相互独立。

 

问题:

如果是新启动的一个线程,那么不会因为线程异步问题,无法控制执行顺序吗?

解释:

当前线程应当会被阻塞,知道另外一个线程执行结束。例如:通过死循环来控制阻塞(当然死循环效率太低,这里只是一个例子)

以上是关于JVM执行native方法,计数器为空(undefined),又怎么继续执行Java代码的问题?的主要内容,如果未能解决你的问题,请参考以下文章

JVM运行时数据区域

JVM内存模型,垃圾回收算法

jvm学习

JVM运行时数据区域

JVM理论:JVM内存模型

java jvm 内存区域