mode=harf + setmainjfont での過大なメモリ消費
(今このコンピュータにあるのは Source Han Serif/Sans だったので) mem_usage.zip にいくつかの方法で Source Han Serif/Sans をロードしたときのメモリ使用量の結果を置きました.ソースファイル a.tex を処理したときの time -v の結果は a.tex.mem にあります.
どうやら,メモリ消費量 (Maximum resident set size) が 2 GB あたりと大きくなるのは,Source Han Serif/Sans を mode=node(luaotfload 標準)で読み込んだときのようです.報告どおり
\usepackage{luatexja-fontspec} \setmainjfont[RawFeature={mode=harf}]{Source Han Serif} \setsansjfont[RawFeature={mode=harf}]{Source Han Sans}でも,また
\usepackage{fontspec} \setmainfont[RawFeature={mode=harf}]{Source Han Serif} \setsansfont[RawFeature={mode=harf}]{Source Han Sans}でもメモリ消費量はそのぐらいですが,内部で(おそらく script とか feature の確認用に?)mode=node で Source Han Serif/Sans が読み込まれていることによるのでしょう.
h7k への返信 fontspecのイシューのほうでharftexの作者から Renderer=HarfBuzz を使えという助言をいただいたので以下のファイルに同じことをやったらだいたいメモリー消費量が0.9 GBくらいになり時間も短くなり改善が見られました。結局luatexjaの問題ではなくて全面的にfontspecにこの現象の原因があるということでしょうか…
\documentclass{minimal} \usepackage{luatexja-fontspec} \setmainjfont[Renderer=HarfBuzz]{Noto Serif CJK JP} \setsansjfont[Renderer=HarfBuzz]{Noto Sans CJK JP} \begin{document} \noindent {日本語}\\ {\gtfamily 日本語}\\ \end{document}
Renderer=HarfBuzz を使え
なるほど.luatexja ではなく fontspec での指定方法の問題だった,というわけですね. とりあえずここはクローズします.
https://github.com/wspr/fontspec/issues/414 と同じかもしれないのと、そもそも mode=harf はサポート対象外かもしれませんが、記録として一応報告します。フォントキャッシュの全消去(Linuxとかでは rm -rf ~/.texlive2019)したあとに下記をすべてのパッケージをtexlive 2019の最新版にしてlualatex-devでコンパイルするとだいたい1.8 ギガバイト程度のメモリを消費しますが、
同じことを以下のファイルについて実行するとメモリ消費がだいたい0.5 ギガバイトくらいで済みます。1.3ギガバイトのメモリ消費増加はでかいので、一応報告します。