TL;DR 太长不看
结论:
- 安装 ARM 版本 zulu8 (LTS) 即可;
- 安装 zulu8 (LTS) 的原因是,截止本文写作日期,Oracle8 并不支持 ARM 原生运行。你可能要问了,我可以装 Oracle17 呀,是 ARM 优化的。可惜用 Java 17 打开 CiteSpace 时会导致 UI 错位,所以,老老实实 zulu8 吧 😂
本文适用人群:
- 了解 CiteSpace;
- 想知道如何 MacBook M1 Pro 运行 CiteSpace 效率怎么样;
- 想知道不同 Java 对运行效率的影响;
- 想知道 Swap 即交换内存对运行效率的影响;
- 想知道 Rosetta 的影响。
本文依赖环境:
- CiteSpace、Homebrew、zulu8(Java 环境)。
安装 CiteSpace
第一步,安装 Homebrew。
# 安装 Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装 Java 8 运行环境
brew tap homebrew /cask-versions
brew install zulu8
如果执行第一步后能正常运行 CiteSpace 那就皆大欢喜。
假设你电脑里有多个 Java 比如你可能有 zulu8、zulu17,我建议你修改 CiteSpace 的启动脚本 StartCiteSpace_Mac.sh
,手动让 CiteSpace 使用 zulu8 打开,这样图形界面才不会出错。
#!/bin/bash
echo Launching CiteSpace …
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home/bin/Java -Dfile.encoding=UTF-8 -Duser.country=US -Duser.language=en -Xms1g -Xmx4g -Xss5m -jar CiteSpaceV.jar
结论先行
- 请使用 ARM 原生运行 CiteSpace,你将会比使用 Rosetta 转译节省 67% 的时间;
- 请不要让 CiteSpace 与别的高负载软件同时运行。如果运行 CiteSpace 时候同时使用了交换内存,将会严重影响运行速度。大约会导致运行效率降低 50%;
- 使用 Java 17 相较于 Java 8,你将会节省 1.6% 时间;
- 修改 Java 的启动参数、内存大小等,对效率影响小于 2%;
- 目前 Java 还是没法跑满 M1 Pro 的核心,目前观察下来大约用了两个大核和两个小核心;
- MacBook M1 得力于更高的内存带宽(204GB/s),虽然 CPU 运算能力没有提升,但在数据处理上,确实如鱼得水。
什么是交换内存?交换内存是在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。
如何确认内存占用?你可以打开「活动监视器」在内存栏就能看到。
如何确定是不是 ARM 原生运行?你可以打开「活动监视器」在 CPU 栏就能看到。
性能测试
- 测试机器一:2019 款 MacBook Pro,i9-9980hk,16GB 内存;
- 测试机器二:2021 款 MacBook Pro,M1 Pro 十核心版本,16GB 内存;
- 测试数据集:我选用了 CiteSpace 自带的 Demo 数据集——科学计量学;
- 测试环境:Oracle8、zulu8、zulu17。这个主要是测试 CiteSpace 在不同 Java 下会不会有小 Bug;
- 测试场景一:低压力情况,内存无占用,全部供 CiteSpace 使用;
- 测试场景二:极限压力情况,内存高占用,此时 CiteSpace 将会使用 Swap。我将会用两个方法模拟内存占用,第一个方法是开多个 Docker,虚拟机,视频剪辑软件,并频繁使用。第二个方法是用脚本强制占用 16GB 内存。
性能测试数据
- Oracle8_default_1_Rosetta
- Oracle8_default_2__Rosetta
- zulu8_custom_1_交换内存
- zulu8_custom_2_正常情况
- zulu8_default_1
- zulu8_default_2
- zulu8_default_3
- zulu17_default_1
- zulu17_default_2
- zulu17_default_3
- zulu8_i9_1_正常内存
- zulu8_i9_2_正常内存
- zulu8_i9_1_交换内存
- zulu8_i9_2_交换内存
ChangeLog
- 220105 init