> Also memory safety is so far off base here, where's that coming from?
It's coming from Go. In presence of data races on interfaces, slices or maps your memory might get corrupted.
> Also why can't I have my memory back when it's not in use in tightly packed systems?
You can. You have to either set your GC to be more aggressive or you need to utilize value types more.
The memory safety thing is just a moot out of scope contract. It seems moot to me every time someone shows up trying to push memory safety everywhere, that's a language to developer contract issue, not a functionality issue. When the contract of the language is such as that of Go vs Rust, the two languages are just offering different contracts. Rust just promises to hold your hand more than Go does.
Regarding the JVM and GC. Good luck with that? Every Java application I've seen in the wild when I supported JVM seemed to never release any ram it allocated. Ever. If it used 1G and even after free, the JVM decided that was going to be used again and wouldn't release it.
It would be hard to sell me on wanting to use Java again (people can pay me enough to do it, but I hate it). Which kinda sucks since Apache Foundation has a ton of really cool projects using it. Kotlin maybe, but I have no real use cases where it would be better than anything else I know right now.
> The memory safety thing is just a moot out of scope contract.
Data races are not common but when they do happen. I hate to debug them. Only thing worse than data races is data races causing SEGFAULTS.
> Every Java application I've seen in the wild when I supported JVM seemed to never release any ram it allocated. Ever.
You can say the same for Go. Nature of GC langs is they consume more memory than what is minimal. And in theory as a trade off they give you memory safety.
Go doesn't even give memory safety. If program is racy enough.
When was the lat time you encountered such issue? The JVM has been more proactive in releasing memory back to the OS[1], and more work on dynamically setting the heap size (both up and down)
[1] https://openjdk.org/jeps/346
[2] https://openjdk.org/jeps/546
[3] https://openjdk.org/jeps/8350152
[4] https://openjdk.org/jeps/8359211