https://docs.adobe.com/content/docs/en/spec/jsr170/javadocs/jcr-2.0/javax/jcr/RangeIterator.html#get...
Returns the total number of of items available through this iterator. For example, for some node N, N.getNodes().getSize() returns the number of child nodes of N visible through the current Session. In some implementations precise information about the number of elements may not be available. In such cases this method must return -1. API clients will then be able to use RangeIterator.getNumberRemaining to get an estimate on the number of elements.
---
Iterators in Java don't know how many items they contain, hence why you iterate over it and count. getAllVersions() in the VersionHistory class just returns an Iterator. It can't determine the size therefore gives you a -1.