Thanks for updating so quickly, Karthik. Sorry, I should have been more clear on my nit with the templates. I was surprised to see such a generic type, both in name and template use, for a specific, private use-case. If the name is something so generic as ConcurrentSkipListMapWithSize then I think it is appropriate to use templates with that name since the name implies it is generic. If we think the templates are overkill then I think it's better to name it more specifically for its purpose, e.g.: JobHistoryInfoMap.
I do like the AtomicInteger change. And as far as the size inconsistency concern, that's already an issue because of the very nature of concurrency whether we synchronize the methods or not. As soon as we get/compute the size, it could be wrong as someone else comes in and changes the map immediately afterwards. In this case the size is only being used to loosely cap the size of the job cache, and it's not critical if we're a few jobs over or a few jobs under that limit.
So I think we're really close. I'd like to see either the ConcurrentSkipListMapWithSize name changed to be more specific to its use case or keep the name and have the templates restored. I don't care too much either way.