JVM陷阱,特别是对于Clojure

JVM陷阱,特别是对于Clojure,clojure,jvm,Clojure,Jvm,我记得我曾经在一家无法在OpenJDK JVM上运行JVM软件的公司工作。他们必须使用Oracle JVM。(完全公开:他们是用groovy/grails编写的。) 但是我看了很多其他JVM应用程序,它们似乎在两个JVM上都工作得很好。OpenJDK JVM似乎是一个可靠的实现 作为Clojure爱好者,我希望能够为这两个JVM编写代码 因此,具体而言: 如果您针对一个JVM,那么在为另一个JVM编写代码时,您必须小心哪些常见的“陷阱” 是否存在特定于语言的陷阱,尤其是在clojure方面 在编

我记得我曾经在一家无法在OpenJDK JVM上运行JVM软件的公司工作。他们必须使用Oracle JVM。(完全公开:他们是用groovy/grails编写的。)

但是我看了很多其他JVM应用程序,它们似乎在两个JVM上都工作得很好。OpenJDK JVM似乎是一个可靠的实现

作为Clojure爱好者,我希望能够为这两个JVM编写代码

因此,具体而言:

  • 如果您针对一个JVM,那么在为另一个JVM编写代码时,您必须小心哪些常见的“陷阱”
  • 是否存在特定于语言的陷阱,尤其是在clojure方面
  • 在编写clojure应用程序时,针对两个JVM是否存在任何常见的陷阱

  • 我不知道Clojure的不同JDK之间有什么重大问题。我们在几个JDK版本和提供者的基础上进行矩阵测试-请参阅当前列表。

    虽然这是一个完全有效的问题,可能会引起一些有意义的讨论,但我不确定它是否适合SOAgree with@rmlan。尝试一下Clojure邮件列表或freenode.netI上的#Clojure irc频道。我必须同意——尽管这是一个有趣的话题,但这太广泛了,不适合在这里使用。只要您使用公共API,并且不生成字节码,一切都应该很好。问题是,在许多情况下,这还不够。因此,如果您使用非公共API,例如使用不安全的API或sun.reflect.MagicAccessorImpl之类的东西,您可能已经陷入麻烦。这不仅是因为另一个JVM可能不提供它们,还因为实现可能不同。当谈到字节码时,我确信OpenJDK和OracleJDK至少有一点是不同的,那就是格式错误的泛型。Oracle倾向于忽略它们,OpenJDK倾向于抛出一个NPE。这个链接真的很有帮助!它并没有涵盖一切,但能看到它的尝试是很好的。这个答案可能和将来的任何答案一样好!