The way I think about it, Java basically runs on a tax that's being levvied on bigcorps being bigcorps. It's not even really a strict commercial/noncommercial distinction, or an arbitrary line being drawn on any metric like profit, revenue, headcount, etc. It's managers covering their asses. It's compliance considerations that only become relevant when you have lawyers running the show. ...otherwise, I don't understand why anyone would ever pay for commercial Java support contracts.
Let's say you actually are a huge corporation, but you're more enlightened than a typical bigcorp. You might look at those millions that you're giving to Oracle and think to yourself: Hey, this is enough money to enable me to pay a whole department of programmers to look after my interests in the Java ecosystem in a more direct way than Oracle would if I gave that money to them... So, then: Why not do that? Java's open source nature and the OpenJDK process presumably allows you to do that. (Or am I missing something here?)
And at the end of the day, that tax on bigcorps ends up funding Java as an open source effort, with value trickling down to all those other Java users like hobbyists, private individuals, academics, startups (regardless of size and profitability) etc. who can't or won't pay for a piece of infrastructure like that.
This is markedly different from other commercial programming language ecosystems. Take Borland/Embarcadero for example, where they expect you to pay a rather steep price if you're using their tools, regardless of whether you can afford them.
Or take Microsoft, for example, where their whole programming language and tooling ecosystem only exists to support their platform serfdom, and they're giving a very rough deal to their developer-serfs. With Java, you as a developer are actually either the paying customer or an important business partner to Oracle who helps them get to paying customers. Not so with Microsoft. They can take paying customers for granted. They don't get more money if more Windows software gets sold to those same customers. (Don't know how much money they make through commissions on sales of Windows software through the Microsoft store, but I'm willing to bet it's dwarfed in comparison to what they make on Windows licensing). So they engage in trivial innovation, giving a face lift to their platform every few years, coming out with one half-baked GUI toolkit after another, which never reach maturity before being abandoned. That's a horrible developer experience, and horrible economics for their developer-serfs.
Another way that things can go wrong, but don't with Java: Where Java takes from the rich and gives to the poor, many other open source efforts have the problem that they end up taking from the poor and giving to the rich. -- See the debate about elastic search where you have a small open-core startup building something, and then Amazon coming along and charging customers for their repackaged version of the product, without passing any of those proceeds along to the creators of the software.
To make things even better: Take what I've written above and substitute "Open JDK consortium" for Oracle, because saying "Oracle" was actually an oversimplification. It's not a single monopolist at the center of all this, but if you don't like Oracle, you can get your support contract from other commercial (e.g. IBM) or non-commercial (e.g. Eclipse foundation) players.
What's not to like?