jit-lock-function は CPU を大量に消費し、emacs が頻繁にハングアップします。同じ問題に遭遇した人はいますか? どうすれば解決できますか?
OS は archlinux x64、CPU intel i7 4790、RAM 16GB です。システム サービス以外は emacs のみが稼働しています。
ありがとう!
プロファイラーレポートには次のように表示されます。
- redisplay_internal (C function) 2728 90%
- jit-lock-function 2724 89%
- jit-lock-fontify-now 2724 89%
- jit-lock--run-functions 2724 89%
- run-hook-wrapped 2724 89%
- #<compiled 0x40f2001> 2724 89%
- font-lock-fontify-region 2724 89%
- c-font-lock-fontify-region 2724 89%
- font-lock-default-fontify-region 2716 89%
- font-lock-fontify-keywords-region 2712 89%
- c-font-lock-declarations 1932 63%
- c-find-decl-spots 1912 63%
- #<compiled 0x22af545> 1148 37%
- c-get-fontification-context 732 24%
- c-looking-at-or-maybe-in-bracelist 504 16%
+ c-backward-token-2 472 15%
- c-back-over-member-initializers 108 3%
+ c-back-over-compound-identifier 56 1%
+ c-parse-state 32 1%
c-backward-sws 8 0%
+ c-back-over-compound-identifier 68 2%
+ c-backward-token-2 16 0%
c-backward-sws 4 0%
+ c-forward-decl-or-cast-1 240 7%
+ c-forward-label 60 1%
+ c-backward-token-2 16 0%
+ c-backward-sws 12 0%
+ c-font-lock-single-decl 8 0%
c-syntactic-re-search-forward 4 0%
+ c-bs-at-toplevel-p 672 22%
+ c-beginning-of-macro 28 0%
c-forward-sws 8 0%
c-backward-token-2 4 0%
c-font-lock-<>-arglists 304 10%
+ #<compiled 0x22b6359> 92 3%
#<compiled 0x22b6381> 68 2%
#<compiled 0x22b5fbd> 32 1%
#<compiled 0x22b62b9> 32 1%
#<compiled 0x22b625d> 28 0%
#<compiled 0x22b62fd> 28 0%
#<compiled 0x22b631d> 28 0%
#<compiled 0x22b63d5> 8 0%
+ c-font-lock-enclosing-decls 4 0%
c-font-lock-enum-body 4 0%
#<compiled 0x22b6669> 4 0%
font-lock-fontify-syntactically-region 4 0%
+ c-before-context-fl-expand-region 8 0%
答え1
あなたの指摘は少し間違っています。時間の 89% は で費やされていますjit-lock-function
が、この時間はすべてc-font-lock-fontify-region
( から間接的に呼び出されるjit-lock-function
)でも費やされています。
したがって、問題は jit-lock ではなく c-font-lock にあります。
これをバグとして から報告してくださいM-x report-emacs-bug
。おそらく、このエラーが現れるバッファの内容の詳細を知らせる必要があるでしょう (C++ ファイルであると想定します)。
これが 26.3 より古い Emacs の場合、c++ モードのフォントロックのパフォーマンスは長年にわたって定期的に改善されているため、バグを報告する前に Emacs-26.3 で試してみる価値があるでしょう。