https://blog.stackademic.com/understanding-java-memory-management-a-deep-dive-with-real-world-examples-3095dac50d49