The problem is that I need to remove an agent from the schedule (I presume that after removing it from the schedule garbage collector will get to it) when his internal condition becomes true. For example, when agent stepped more than 50 times. How do I do that?

Some dirty workaround to this I was able to find is to wrap my agent into another class and put agent = null into the stop() function body. But this is no good, because it leaves wrapper in memory.

I've tried to implement Steppable and Stoppable interfaces to an agent itself and call stop() method the agent, but I can't figure out what to put into the stop() method body, and with empty method it does not work ^^. So when "death" condition becomes true, agent just calls his stop() method over an over again.

Can someone please advice?