Anyway the biggest issue I have seen in my line of work (building GPU software, and people want GPU acceleration from their language of choice) is that JVM does not provide a way to handle external resources properly. Calling garbage collection does not guarantee that the out of scope objects will be finalized. This results in either code that uses up a lot of memory or code that is very un-java like.
Yes I know try with resources exist, but the problem still exists for any temporary variables you create within the block.
If anyone here has a better solution, I am all ears.