| Cool article, I'm not sure I agree with the headline. I used to write low-scale Java apps, and now I write memory intensive Go apps. I've often wondered what would happen if Go did have a JVM style GC. It's relatively common in Go to resort to idioms that let you avoid hitting the GC. Some things that come to mind: * all the tricks you can do with a slice that have two slice headers pointing to the same block of memory [1] * object pooling, something so common in Go it's part of the standard library [2] Both are technically possible in Java, but I've never seen them used commonly (though in fairness I've never written performance critical Java.) If Go had a more sophisticated GC, would these techniques be necessary? Also Java is supposed to be getting value types soon (tm) [3] [1] https://ueokande.github.io/go-slice-tricks/ [2] https://pkg.go.dev/sync#Pool [3] https://openjdk.java.net/jeps/169 |
Nowadays the GC implementations are good enough that's it's not worth the effort and complexity.
Though now that I think about it Netty provides an object pooling mechanism.