Scala开发人员应该了解Java和/或JVM?

时间:2012-07-06 08:50:43

标签: java scala jvm

直到大约6个月前,我的大部分工作(大图处理)都包含Python和C ++。到目前为止,甚至现在,我还没有编写任何Java ..我已经看过语言并且熟悉语法(来自C / C ++背景),并且喜欢JVM的想法,但从来没有实际上写了大量的Java。

当我选择Scala时,我非常喜欢它,OOP和函数式编程功能于一身,它在JVM上非常棒。我一直在努力改进我的Scala并且一直在玩Akka,并且仍然喜欢它。然而,有时候,也许只是我推翻它,但我觉得我应该学习更多关于Java和/或JVM的知识。

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

思想?

6 个答案:

答案 0 :(得分:10)

  1. JVM执行Bytecode,明确知道这是如何工作的,这有助于了解C / C ++方法调用的工作原理或类的初始化方式;因为有时它很重要而且不能被抽象掉。

  2. Java是JVM的主要语言,如果您需要直接使用Java类,能够在某种程度上读取Java是有帮助的。这可能经常发生;只有几个例子:

    • 你需要使用一些第三方Java库(并且有很多)
    • 使用“属性”
    • 你需要在Swing中做一些特殊的事情,Scala-Swing包装器不支持
    • 也解释1)的内容很可能会使用Java示例
  3. 但我的建议不是提前研究它 - 你会在需要的时候拿起它。

答案 1 :(得分:9)

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

答案 2 :(得分:9)

我的头脑

  • 原语,自动装箱以及java数组如何特殊;

  • 删除和清单

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

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

  • 在REPL中设置类路径,作为编译器选项,在SBT中设置

  • Hotspot交换机,XMX,XMS(堆设置),最常见的垃圾收集器,内联方法调用

  • 的java.util.concurrent

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

答案 3 :(得分:8)

我不确切知道你需要什么,但是在SO上有几个类似的问题,看看吧。

此外,这里有关于Java Memory Model的好文章

我认为最好挖掘Java语言,编写一些代码,阅读特定于Java的书籍,以便更好地理解所有内容的工作原理。

答案 4 :(得分:5)

JVM周围有很多工具。如果你想了解你的程序是如何运行的(出于性能或其他原因),那么值得为它们做好准备。两个有用的工具是:

  1. jstack
  2. visualvm
  3. 两者对于监控和查询长期运行的流程特别有用。

答案 5 :(得分:1)

我认为在编写Scala时,您将了解有关JVM的更多信息。我的意思是你会有更多的问题,比如'为什么这个解决方案很慢而且速度快?' - 回答这个问题的一种方法是检查字节码