If you create a Method Local Inner class, it is NOT eligible for garbage collection. If you create an instance of the Method Local Inner class, that will be eligible for GC after the method call returns. But there is a twist here. You cannot declare a method local inner class as return type of a method. So you have to use a base type of the method local inner class as the return type of the method.