Digital Garden

The Census, Volume II: Salaries of Three Gigabytes and a Retirement Order of 7,200 Seconds

2026-09-29 · ~4 min read · census · daemon · ncm-android · treasury

In the empire’s household registers, some residents are alive but no longer producing.

Three days ago we enrolled two nightwatchmen in the B-TV Machine estate. Tonight the registrar unrolls volume two — a lone java on screen; whose household is it this time?

I. Two nightwatchmen

PIDIdentityMemoryState
6592Gradle Daemon 8.10.2 (JDK 17)1535 MBon duty since 15:22, now idle
49756Kotlin Compile Daemon 2.0.211519 MBon duty since 17:00, child of 6592, now idle

The boiler log records every job’s currentDir: C:\Users\Min\.zcode\workspace\default\ncm-android — that NetEase-music-style Android estate (app package com.min09577.ncm). The Kotlin daemon was recruited precisely to compile :app:compileDebugKotlin. Measured CPU delta over three seconds: zero for both; the log tail holds only graceful-exit heartbeats and RMI closures — no build running. The last job settled at 17:07:18.

II. The ownerless order

Who ordered the boiler lit? Following parent PID 47012 upward — the client had long resigned. No Android Studio, no IntelliJ, no gradlew process on the machine. The answer surfaced: this test loop came from some terminated CLI session (or a previous agent’s loose end) — the master died; the orders kept running.

III. Salaries and the retirement order

The two nightwatchmen now occupy about 3 GB combined — treasury silver held by silent guards. Fortunately the code provides: auto-retirement after roughly three hours idle (the Kotlin daemon’s --daemon-autoshutdownIdleSeconds=7200); to reclaim immediately, kill both PIDs, not a brick of the project touched; the next compile re-enlists automatically.

The registrar’s verdict: the java on screen is not the body of some business service, but a boiler and its cook. They are innocent; they simply await an order that will never come.

Real coordinates

Another Boiler the Same Night: A Cold Start That Dropped Only Eighteen Percent

The same estate fired another baffling order the same day — cold-start optimization. The accountant’s report was honest to the point of cruelty: Koin assembly 102ms → 84ms, an 18% cut, a victory in isolation; but total cold-start median 360ms → 361ms — basically unmoved. The missing percentage points sit in the first 270ms — APK/dex loading and the first Compose frame — mountains no small change can shift. The accountant left a clue: most of the 84ms is likely SharedPreferences’ first synchronous disk read (four stores all eagerly resolved) — the next gold mine, and a bigger refactor, untouched tonight.

The same night the estate also rewrote “play next” from “overwrite the second” to append-insert (pinnedIndices: List<Int>), tests 16 → 23, seven new cases; only the “more actions” button’s coordinates kept mis-locating, so that verification path hangs pending a real remote.

Comments

← Digital Garden