タイトルが微妙な言い回しになっているのは、色々と自信がないからですが、とりあえず説明を書いていきます。
続きを読むライブラリを使わずにScalaプログラム内部でclasspathなどを丸ごと引き継いで別のJVMを立ち上げるサンプル
そもそもがかなりレアケースなのですが、一応、稀にありえるシチュエーションとしては
- 特別な(微妙な)コードをテストしたい
scala.sys.exit
自体を至る所で呼び出していて、本来それ自体を改善したいが、一旦それをそのままテストしたい- mainスレッドが終わった後に、デーモンではないスレッドが残らないか?みたいな、JVM丸ごと変えないと実質テストが難しいもの
- objectの内部などで
java.lang.System.getProperty
的なグローバルに依存した(初期化の)処理を実行してしまっていて、そこのコード変えないとうまくテストができない(が、コードをすぐに変えられない) - shutdown hook的な処理自体のテストを本物に近い形で行いたい
- 普通にプログラムを書くと依存ライブラリが衝突して困ってるが、ClassLoader使うテクニックもやりたくないのでJVMのプロセスを丸ごとforkして処理を実行したほうが(効率は微妙だが)わかりやすい
などです。タイトルにも書いた細かいポイントとして
続きを読むscala.collection.concurrent.TrieMapが最低限消費するメモリ量はいくつか
scalametaのbug調査のついでのメモ。
30万行のScalaコードをscalametaでparseすると、そこには11億個のTrieMapが〜〜〜https://t.co/TVgP3w2CMV pic.twitter.com/0e2HbBBZOJ
— Kenji Yoshida (@xuwei_k) March 16, 2024
続きを読むいや11億個は嘘じゃん、11億はByte数じゃん
— Kenji Yoshida (@xuwei_k) 2024年3月16日