热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么有JVM指令`monitorenter/monitorexit`但没有`wait/notifyAll`(它们是本机调用)?

如何解决《为什么有JVM指令`monitorenter/monitorexit`但没有`wait/notifyAll`(它们是本机调用)?》经验,为你挑选了1个好方法。

当我们编写时,synchronized(some_object){}我们可以看到两个JVM指令monitorenter/monitorexit作为字节代码发出.

当我们编写时,synchronized(some_object){some_object.wait()}我希望看到特殊的JVM指令wait,但是没有 - 而是wait/notify实现为本机C函数.

为什么会出现这种不一致(要么将它们全部作为JNI还是作为java字节代码)?是否存在特定(历史)原因或仅仅是品味问题?

上下文:我对此感兴趣,因为monitorenter/monitorexit/wait/notify在字节码中包含所有内容将允许"不处理JNI的JavaByteCode程序正确性验证程序"来验证不使用JNI的并发Java程序.目前,这种假设工具必须解决等待/通知.



1> Jon Skeet..:

我希望看到特殊的JVM指令 wait

我不会.这在我看来是不一致的 - 在源代码中,你只是调用一个方法,所以你只是在字节码中调用一个方法也是有意义的.否则,编译器必须具有这些方法的特殊知识,而目前它们并不存在.

可以说,通过方法调用也会更有意义monitorentermonitorexit实现(例如,在.NET中).某些方法总是本机的并且与JVM本身密切相关 - 我没有看到任何不合理的东西,我不希望每个方法都通过单独的字节码操作来实现.但是,考虑到它是一种语言结构(比如),而不仅仅是常规的方法调用,我没有太多的问题需要synchronized特殊的字节码支持它try/catch/finally.


推荐阅读
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • 如何解决《何时何地在Java源代码中初始化/存储String?》经验,如何解决这个问题? ... [详细]
  • 深入剖析JVM垃圾回收机制
    本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ... [详细]
  • 本文详细探讨了Java中的ClassLoader类加载器的工作原理,包括其如何将class文件加载至JVM中,以及JVM启动时的动态加载策略。文章还介绍了JVM内置的三种类加载器及其工作方式,并解释了类加载器的继承关系和双亲委托机制。 ... [详细]
  • Java性能优化策略详解
    在Java开发中,性能优化是提高应用程序响应速度和资源利用率的关键。本文详细探讨了多种Java性能优化技巧,包括合理使用单例模式、避免滥用静态变量、减少对象创建、使用final修饰符、合理管理线程同步等,旨在帮助开发者写出更加高效稳定的代码。 ... [详细]
  • 如何解决《Kotlin与Android上的ART100%兼容吗?》经验,为你挑选了1个好方法。 ... [详细]
  • 如何解决《JVM如何处理动态类》经验,为你挑选了1个好方法。 ... [详细]
  • 如何解决《口译员如何解释代码?》经验,为你挑选了1个好方法。 ... [详细]
  • 如何解决《为什么OpenJDK将私有方法放入vtable?》经验,谁能帮忙解答一下? ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 本文详细介绍了Java中的注解功能,包括如何定义注解类型、设置注解的应用范围及生命周期,并通过具体示例展示了如何利用反射机制访问注解信息。 ... [详细]
  • 大数据基础:JavaSE_day06 ... [详细]
  • 本文总结了WebSphere应用服务器出现宕机问题的解决方法,重点讨论了关键参数的调整,包括数据源连接池、线程池设置以及JVM堆大小等,旨在提升系统的稳定性和性能。 ... [详细]
  • 如何解决《使用ASM(5.x)在字节代码中检测运行时的递归方法调用:howto?》经验,有好办法吗? ... [详细]
author-avatar
路人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有