"Free" is a pretty vaguely defined word, and you'll never find a definition with which absolutely everyone agrees.
In the case of Java, a lot of doubt probably stems from the fact that the JDK used to be partially closed source - the OpenJDK project was started only in 2006. Some of hte things you read mamay be from before that time.
With the GLP-licensed OpenJDK now being the reference implementation, Java has become a lot "freer" than it used to be, probably "free" enough for most people.
But there remain two pain points:
- The test suite that certifies an alternative implementation's compatibility with Java standards is not GPL - it's under a very restrictive license that doesn't even allow you to run the code unless your implementation is derived from the OpenJDK.
- The patent lawsuit of Oracle vs. Google over Android's Dalvik VM gave a alot of people doubts over Oracle's commitment to "freedom". Having the code under the GPL doesn't mean much when adapting it may violate patents.