【发布时间】:2014-09-19 21:27:32
【问题描述】:
我记得我曾经在一家无法在 OpenJDK JVM 上运行他们的 JVM 软件的公司工作。他们不得不使用 Oracle JVM。 (完全披露:他们是用 groovy/grails 编写的。)
但是我查看了很多其他 JVM 应用程序,它们似乎在两个 JVM 上都可以正常工作。 OpenJDK JVM 似乎是一个可靠的实现。
作为 Clojure 爱好者,我希望能够为这两种 JVM 编写代码。
所以,具体来说:
- 有哪些常见的“陷阱”,如果您针对的是一个 JVM,那么在为不同的 JVM 编写代码时必须小心?
- 是否存在任何特定于语言的缺陷,尤其是在 clojure 方面?
- 在编写 clojure 应用程序时,针对两个 JVM 是否存在任何常见的陷阱?
【问题讨论】:
-
虽然一个完全有效的问题可能会引发一些有意义的讨论,但我不确定它是否适合 SO
-
同意@rmlan。试试 Clojure 邮件列表 groups.google.com/forum/#!forum/clojure 或 freenode.net 上的#clojure irc 频道
-
我必须同意——这太宽泛了,不适合在这里,尽管这是一个有趣的话题。
-
只要您使用公共 API 并且不生成字节码,一切都应该没问题。问题是,在许多情况下这还不够。因此,如果您转向非公开 API 并使用例如 Unsafe 或 sun.reflect.MagicAccessorImpl 之类的东西,您可能已经遇到了麻烦。不仅因为另一个 JVM 可能不提供它们,还因为实现可能不同。当谈到字节码时,我肯定知道 OpenJDK 和 OracleJDK 通常至少有一点不同,那就是格式错误的泛型。 Oracle 倾向于忽略它们,OpenJDK 倾向于抛出 NPE。