What do you mean by "Java is limited"?
I have some ideas, mostly developer-oriented, that may not be what you're thinking of.
First off, Java--alone--is a far superior platform for developing applications to C++ alone. There are no standard C++ classes or libraries for developing a user interface, networking, managing a file system, security, data compression, etc. All of these exist in the Java SE platform.
C++ has limited support for object oriented programming, since polymorphism only works when objects are accessed explicitly by reference or through pointers. Java solves this by having *all* object access through references, so maybe this is a limitation of Java. But C++ "references" are tacked onto a C memory model that uses pointers and manual memory management.
Intelligently used, C++ can be used to create efficient and easily-maintained software systems, but it usually takes a lot of "plumbing" in the classes to get things right; and even then, simple coding errors can cause an indecipherable avalanche of error and warning messages.
The resulting program written in C++ isn't always faster, either. I had a private embarrassment several years ago when Ratchetr (still leading the answer-board here even though inactive for a couple of years) posted a short C# solution to a question here (sorry, can't find the link...searching old Y!A answers is nearly impossible). Something involving summarizing a dataset by building a hashed dictionary. I started to answer that C++ and the (at that time) new C++11 unsorted_map class could get better performance by having the main loop statically optimized and compiled, but decided to write the code to measure just how much faster.
To my surprise, the C++ version, using std::unsorted_map straightforwardly, release build with full optimization, was SLOWER than the C# version compiled on the same Visual Studio 2010 release by about half.
I'm pretty sure that smarter use of unsorted_map, pre-allocating the map size, and maybe some file I/O improvements, could have tilted the balance back in favor of C++, but the point is that the C# programmer didn't have to do anything special to get decent performance out of the platform.
Also, there is portability. C++ is built on C, which in turn was designed primarily for developing Unix applications. A Unix programmer's idea of portability means "portable to another Unix", and even that's not always a breeze. Take a look sometime at the things that the autoconf tool needs to do.
Java handles cross-platform portability much better. Threading and exception handling always work, for example, and no changes to compiled class files are needed. C++ has binary compatibility issues even among different compilers for the same machine.
So, there you have a number of arguments that it is C++ that is limited, compared to Java (or C#). You probably have a different idea of "limited", but we'll never know if you don't say what that idea is.