在 MacBook M1 上优雅的使用 CiteSpace

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

结论先行

  1. 请使用 ARM 原生运行 CiteSpace,你将会比使用 Rosetta 转译节省 67% 的时间;
  2. 请不要让 CiteSpace 与别的高负载软件同时运行。如果运行 CiteSpace 时候同时使用了交换内存,将会严重影响运行速度。大约会导致运行效率降低 50%;
  3. 使用 Java 17 相较于 Java 8,你将会节省 1.6% 时间;
  4. 修改 Java 的启动参数、内存大小等,对效率影响小于 2%;
  5. 目前 Java 还是没法跑满 M1 Pro 的核心,目前观察下来大约用了两个大核和两个小核心;
  6. 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 内存。

性能测试数据

ChangeLog

  • 220105 init