【问题标题】:What should a Scala developer know about Java and/or the JVM?Scala 开发人员应该了解 Java 和/或 JVM 什么?
【发布时间】:2012-07-06 08:50:42
【问题描述】:

所以直到大约 6 个月前,我的大部分工作(大图处理)都由 Python 和 C++ 组成。到那时,甚至现在,我还没有写过任何 Java。我看过这种语言并且熟悉语法(来自 C/C++ 背景),并且喜欢 JVM 的想法,但从来没有实际上写了大量的 Java。

当我拿起 Scala 时,我非常喜欢它,OOP 和函数式编程功能集于一身,而且它在 JVM 上非常棒。我一直在努力改进我的 Scala,并且一直在使用 Akka,并且仍然喜欢它。然而,有时,也许只是我想多了,但我觉得我应该多学习一些关于 Java 和/或 JVM 的知识。

我从很多人那里听说 Scala 应该被视为与 Java 不同的语言,就像 C++ 到 C 一样。也许您可能有同样的感觉,也许学习 Java 与学习 Scala 或多或少是脱节的,但我'我觉得了解更多关于 JVM 的知识(例如 JIT 编译、类型擦除)会有所帮助吗?

想法?

【问题讨论】:

    标签: java scala jvm


    【解决方案1】:
    1. JVM 执行字节码,知道它是如何工作的肯定会很有帮助,就像知道 C/C++ 方法调用如何工作或如何初始化类有时会有所帮助一样;因为有时它很重要,无法抽象出来。

    2. Java 是 JVM 的主要语言,如果您需要直接使用 Java 类,在一定程度上能够阅读 Java 会有所帮助。这可能经常发生;仅举几个例子:

      • 您需要使用一些第三方 Java 库(而且有很多)
      • 使用属性
      • 您需要在 Swing 中做一些 Scala-Swing 包装器不支持的特殊操作
      • 还有解释 1) 内容的资源很可能会使用 Java 示例

    但我的建议是不要提前研究它 - 你会在需要时拿起它。

    【讨论】:

      【解决方案2】:

      立即购买此书:Java Performance。它是去年 10 月才发布的,对于任何想要了解 JVM 的人来说,它都是一个信息宝库。如果你要成为一名 Scala 开发人员,你至少必须了解垃圾收集和 JVM 运行时参数。

      【讨论】:

        【解决方案3】:

        想不通

        • 基元、自动装箱以及 java 数组的特殊之处;

        • 擦除和显示

        • scala 源码中的逻辑尾递归调用是如何编译的

        • 在您的平台上安装 -client、-server 以及当您想尝试 32 位时:例如OS X 中的 JAVA_HOME 和“Java 首选项”。我认为 openJDK 应该可以在您使用相同版本的 Oracle JDK 的任何地方工作,但 IntelliJ 警告您只能使用官方的 Oracle JDK。我看到了一些非常孤立的报告,即 3d 图形库在 openJDK 上存在问题,并且 openJDK 的某些部分(如字体)也存在许可问题。

        • 在 REPL、编译器选项和 SBT 中设置类路径

        • 热点开关、XMX、XMS(堆设置)、最常见的垃圾收集器、内联方法调用

        • java.util.concurrent

        • 在 JDK 6 和 7 中编译的 java 和 scala 代码可能存在二进制兼容性问题。

        【讨论】:

          【解决方案4】:

          我不知道你到底需要什么,但是关于SO有几个类似的问题,看看吧。

          另外,这里有关于 Java 内存模型的好文章

          我认为最好是深入研究 Java 语言,编写一些代码,阅读 Java 特定书籍,以便更好地了解所有事物的工作原理。

          【讨论】:

            【解决方案5】:

            围绕 JVM 有很多工具。如果您想了解您的程序是如何运行的(出于性能或其他原因),那么这些都是值得的。两个有用的工具是:

            1. jstack
            2. visualvm

            两者对于监控和询问长期运行的进程特别有用。

            【讨论】:

              【解决方案6】:

              我想你在编写 Scala 时会更多地了解 JVM。我的意思是你会有更多的问题,比如“为什么这个解决方案很慢而那个很快?” - 回答这个问题的一种方法是检查字节码

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2010-11-11
                • 1970-01-01
                • 2010-11-03
                • 2011-02-16
                • 2011-01-09
                • 1970-01-01
                • 2010-09-14
                • 1970-01-01
                相关资源
                最近更新 更多