作为DataSurface的一部分,我开始编写Java Spark任务。我在datasurface仓库中增加了gradle子项目,并在VSCode中安装了默认的Java扩展,支持智能感知、调试和gradle功能。
但这似乎有点慢,可能是我习惯了在VSCode中使用Python的体验,所以可能变得有点挑剔了。一旦我能开始写测试并运行它们,情况马上就变得更糟了。
我在调试测试时发现,启动Spark会话竟然需要超过一分钟的时间,这可真让人沮丧。这机器是M2 MacBook Air(这机器真快)。从1990年开始,我就一直在写Java,那些机器都没这M2 MacBook快。
所以,为什么这么慢呢?我首先想到的是垃圾收集,但JVM分配的内存不足,所以我打开了进程活动监视工具,当它使用了100% CPU时,内存使用还不到1G内存。然后我注意到了一个关键点。进程监视器有一个架构列,显示是Apple还是Intel架构。我的JVM使用的是Intel架构。这意味着它们正在通过Rosetta进行模拟,以使我的M2能够运行Intel架构的应用程序。这样我的M2就可以运行Intel架构的应用程序了。
在早期的苹果芯片阶段,这一点至关重要,但现在几乎所有的部分都已原生支持苹果芯片。我没有安装Intel的JVM,但不知怎么地,vscode似乎自己搞定了这件事。
卸载Intel的JVMs您可以使用以下命令来查看已安装的JVM:
具体的命令
请根据您的实际环境输入相应的命令。
运行此命令来查看 Java 安装的位置:
$ /usr/libexec/java_home -V
这里列出了JVM。每个JVM都列出来了,并且你可以看到是x86还是arm64架构的JVM。我们需要移除x86架构的JVM。似乎最简单的方法是使用‘rm -rf’命令加上JVM文件路径。例如:
在终端中运行以下命令来删除JDK 17:
$ sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
对于每台机器上安装的每个x86 JVM,都要这样做。将它们替换为苹果的原生JVM。我目前安装的JVM如下:
$ /usr/libexec/java_home -V
找到的 Java 虚拟机 (4):
17.0.11 版本 (arm64) "Oracle Corporation" - "Java SE(标准版)17.0.11" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
11.0.23 版本 (arm64) "Eclipse Adoptium" - "OpenJDK(开源版)11.0.23" /Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home
11.0.23 版本 (arm64) "Azul 系统公司" - "Zulu 11.72.19" /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home
1.8.0_412 版本 (arm64) "Azul 系统公司" - "Zulu 8.78.0.19" /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
最后一行看起来表明默认的JVM是这样的,对我来说。
$ java --version
java 17.0.11 2024-04-16 LTS
Java SE 运行环境 (版本 17.0.11+7-LTS-207)
Java HotSpot 64位服务器 VM (版本 17.0.11+7-LTS-207, 混合模式,可共享)
目前,我没有x86的JVM了。在我的系统上也没有剩余的了。
设置默认的 vscode Java 语言服务器的 JVM 环境接下来,确保 vscode 使用你想要的 JVM 作为语言服务器端,并设置它所需的 JVM 内存大小。
"java.jdt.ls.vmargs": "-Xmx4G",
"java.jdt.ls.java.home": "Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home"
我在使用JDK 11,并设置了4GB的堆空间。这意味着可以使用4GB的堆内存。语言服务器处理VS Code中的所有Java操作。
为项目指定JDK我在创建一个Spark作业,由于Spark使用的一些类库在最新的JDK版本中不再支持,所以我需要使用JDK 1.8来运行我的Spark作业。这与上述提到的语言服务器无关。我在build.gradle文件中这样指定。
设置 Java 源代码和目标兼容性为 1.8:
源代码兼容性 = 1.8
目标兼容性 = 1.8
然后我还将项目的JDK设置为1.8,在vscode的设置中。你可以先按下Cmd-Shift-P打开设置,然后输入相关设置即可。
Java: 配置 Java 运行环境
这将打开一个面板,显示工作区中可用的Java项目,并允许你验证或更改项目的Java版本。对我来说,它显示的是1.8版本。此面板还允许你通过VSCode下载JDK,只需确保下载的是arm64版本的。从这里下载比自己去找要方便得多,因为较旧版本的支持情况各不相同。
如果你下载了它,请再用上面的步骤确认它是arm64而不是那个Intel的。
摘要
这大大提高了运行测试的效率,从超过一分钟缩短到几秒钟,变化非常大。
共同学习,写下你的评论
评论加载中...
作者其他优质文章