weixin_40677240 2019-07-02 16:13 采纳率: 28.6%
浏览 238

请问JAVA中native方法对线程和JNI的解析和在CodeCache的保存有何影响和不同?

多线程状态下 当前线程调用到 native 方法时,对于 JVM 来说,是对其他线程进行 阻塞,等待当前线程执行完 native 方法,还是在执行 native 方法过程中,任然可以进行多线程的切换执行?(目前没有环境,无法测试)

那么当调用到 native(如:C++) 方法时,会被 JNI 在 Code Cache 解析为一条指令,还是继续解析 native 方法得到相应指令?如果是继续解析 native 方法 ,那么解析后的机器码,在 Code Cache 中的保存和 将 JAVA 代码解析后的机器码保存有什么不同?

谢谢。

  • 写回答

1条回答

  • 明初啥都能学会 2024-04-29 15:58
    关注

    该回答引用ChatGPT3.5,结果代码方法已验证可行

    当当前线程调用到 native 方法时,对于 JVM 来说,通常是在执行 native 方法的过程中继续进行多线程的切换执行。JVM 会使用本地方法调用(JNI)来执行 native 方法,而 JNI 通常是在本地系统级别进行调用,因此不会影响 JVM 的线程调度机制。因此,在执行 native 方法期间,其他线程仍然可以被 JVM 进行调度,继续执行其他任务。

    关于 native 方法的执行,一般情况下,JNI 会将 Java 代码中的 native 方法调用转换为一条本地指令,然后通过本地方法库执行相应的本地方法。这个本地方法库会负责将 Java 虚拟机的调用转换为操作系统级别的调用,并最终执行对应的本地代码。

    至于机器码的保存,Java 代码解析后的机器码通常是保存在 JVM 的方法区中,而 native 方法的机器码通常是保存在本地方法库中。这两者之间的主要区别在于存储位置和执行方式:Java 代码的机器码由 JVM 解释执行,而 native 方法的机器码由本地方法库执行。

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。