Yes, this does create a new Counter instance every time, so there is a fair amount of allocation that can happen. The only easy way I see around this is to make the Counter class no longer immutable, which I'm not sure is something we want to do, given that from the rest of the application standpoint, it is read-only data.