One of the things I've learned about Java after having used it for the past few months is that you still need to think about memory management. There are common programming idioms (say, a mutual dependency between a parent and its child) that result in data structurs that don't get garbage collected.
I learned this first-hand when using Junit to write unit tests. As the test runs, the process grows to over 20GB. On low-memory machines the tests end up crashing with a memory error.
I always find myself pining for C++ destructors, which give me control over memory management that I don't have in Java.
Solving the problem of dangling references just created a different problem.
One of the things I've learned about Java after having used it for the past few months is that you still need to think about memory management. There are common programming idioms (say, a mutual dependency between a parent and its child) that result in data structurs that don't get garbage collected.
I learned this first-hand when using Junit to write unit tests. As the test runs, the process grows to over 20GB. On low-memory machines the tests end up crashing with a memory error.
I always find myself pining for C++ destructors, which give me control over memory management that I don't have in Java.
Solving the problem of dangling references just created a different problem.