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

ade*_*rtc 18 java jvm scala

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

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

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

思考?

zig*_*tar 10

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

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

    • 你需要使用一些第三方Java库(并且有吨)
    • 使用Properties
    • 你需要在Swing中做一些特殊的事情,Scala-Swing包装器不支持它
    • 也解释1)的东西的来源很可能会使用Java示例

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


jam*_*mie 9

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


Gen*_*e T 9

我的头顶

  • 原语,自动装箱以及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代码可能存在二进制兼容性问题.


mis*_*off 8

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

另外,这里有Java Memory Model的好文章

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


Bri*_*new 5

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

  1. jstack
  2. VisualVM的

两者对于监视和查询长时间运行的进程特别有用.