Scala开发者需要了解哪些关于Java和/或JVM的知识?

18

大约六个月前,我的大部分工作(大型图形处理)都是使用Python和C++完成的。到那时为止,甚至现在,我都没有写过任何Java代码。虽然我已经看过这种语言并熟悉其语法(来自C/C++背景),而且喜欢JVM的概念,但实际上从未写过实质性的Java代码。

当我接触Scala时,我很喜欢它,因为它集成了面向对象编程和函数式编程功能,并且在JVM上运行非常好。我一直在努力提高我的Scala编程水平,并且一直在尝试使用Akka,仍然很喜欢它。然而,有时候,也许只是我想得太多,但我觉得学习一些关于Java和/或JVM的知识可能会有所帮助。

许多人说Scala应该被视为与Java不同的语言,就像C++对C一样。也许你也有相同的感觉,也许学习Java与学习Scala更多或更少是不相关的,但我认为学习更多关于JVM的知识(例如JIT编译,类型擦除)可能会有所帮助?

您有什么想法?

6个回答

10
  1. JVM执行字节码,了解它的工作原理非常有帮助,就像了解C/C++方法调用或类初始化的工作原理一样;因为有时这很重要,不能抽象掉。

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

    • 你需要使用某些第三方Java库(而这些库的数量非常多)
    • 处理Properties
    • 你需要在Swing中做一些特殊操作,而Scala-Swing包装器不支持这些操作
    • 此外,解释1)的资料通常会使用Java示例

但我的建议是不要提前学习 - 当你需要时,你会自然而然地掌握它。


9

现在购买这本书:Java Performance。它于去年十月才发布,对于想要了解JVM的任何人来说都是一宝藏。如果你打算成为Scala开发人员,至少必须了解垃圾收集和JVM运行时参数。


9

从头开始

  • 基本类型、自动装箱和Java数组的特殊性;

  • 擦除和清单

  • Scala源代码中逻辑尾递归调用的编译方式

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

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

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

  • java.util.concurrent

  • Java和Scala代码在JDK 6和7中编译可能出现二进制兼容性问题。


8

5

有很多与JVM相关的工具。如果您想了解程序运行的情况(包括性能或其他原因),那么熟悉这些工具是值得的。两个有用的工具是:

  1. jstack
  2. visualvm

这两个工具特别适用于监控和查询长时间运行的进程。


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接