记录生活、记录历史

利用Metal框架提高macOS上的java2d渲染性能

2021.05.18

目前,Mac上的java2d使用OpenGL渲染图形原语。Metal框架提供了更好的性能,并对现代macOS版本和硬件提供了更好的支持。因此,我们需要利用它来提高java2d的渲染性能。

1. 概述

在Apple M1芯片的电脑上使用Idea时,界面卡顿比较严重。整体体验非常差。在谷歌上搜索了一翻,找到是由于OpenCL在Arm架构上的性能一般。Zulu有针对Java的Swing做Metal的支持。以下是针对具有Metal支持的Java版本的编译及更改Idea的Runtime的全过程。

2. 下载Zulu AArch版本

下载Zulu 16.0.1,并将JAVA_HOME引用至Zulu 16.0.1的文件夹。

1
2
3
curl -O https://cdn.azul.com/zulu/bin/zulu16.30.15-ca-jdk16.0.1-macosx_aarch64.zip
unzip zulu16.30.15-ca-jdk16.0.1-macosx_aarch64.zip
export JAVA_HOME="$(pwd)/zulu16.30.15-ca-jdk16.0.1-macosx_aarch64"

3. 下载与编译JetBrainRuntiome

克隆JetBrainsRuntime到本地目录,并切换到jb17*分支。

1
2
3
git clone git://github.com/JetBrains/JetBrainsRuntime.git
cd JetBrainsRuntime
git checkout "tags/$(git tag -l --sort=v:refname "jb17*" | tail -n1)"

执行编译:

1
2
sh ./configure --prefix=$(pwd)/build  --disable-warnings-as-errors
make images

如果编译出现以下错误:configure: error: No xcodebuild tool and no system framework headers found, use --with-sysroot or --with-sdk-name to provide a path to a valid SDK时,请在执行: sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

4. 应用

  1. 添加vmoptionsHelp > Edit Custom VM Options
1
2
-Dsun.java2d.metal=true
--illegal-access=warn
  1. 将jdk17拷贝至Java虚拟机根目录处,以供其他程序使用:
1
sudo cp -rf build/macosx-aarch64-server-release/images/jdk-bundle/jdk-17.jdk /Library/Java/JavaVirtualMachines
  1. 在Idea中,点击 Help | Find Action… ,输入 Choose Boot Java Runtime for the IDE,打开选择框如下:

选择Idea运行时,选择对应的jdk17存放的位置。

如果启动遇到错误,需要调整回默认的JDK时,请在Idea的jdk配置放置在下面的目录中,删除里面的内容后重启即可。

1
~/Library/Application Support/JetBrains/<product><version>/idea.jdk

5. 小结

使用支持Metal的JBR后,整体界面的性能提升非常明显。但是兼容性存在一些问题。例如找不到 Alt + ,(设置)项。关于项显示的窗口并不是最新的窗口。从目前来看,能初步缓解Idea的使用问题。但长远看,还是得Jetbrains官方的JBR。

除此之外,提升JetBrains IDE的更快捷的方法是在插件内安装 Atom Material Icons 插件。 当前这种办法为最优解!

6. 引用