https://luyee.dev/archives/jvm-memory-allocation