At least in my experience, it's pretty difficult to compare C ++ with Java because they follow in different ways. Almost the only way to compare them in a meaningful manner is to calculate the complexity of the graphs compared to the software “size” for both:
Black line = C ++, red line = Java.
Especially if you look mainly at really small projects, C ++ may seem almost impossible - adding even a few functions is a lot of work and adds a lot of complexity to the code. This (especially) at the stage where almost everything that you do means searching, building, training, etc., Another library, which is usually not dependent on others.
For projects of this size, Java is often much more attractive - it comes with a much larger standard library, which (basically) matches roughly the same style, so what you know about one part is pretty good for the other parts. You also get things like garbage collection, so your memory management tends to be relatively trivial.
For large projects, the situation is reversed - operator overloading, which is why some of the libraries that are difficult to master also simplify their use as soon as you know how to do it. Similarly, patterns that are really hard to wrap around can solve a much wider range of problems without using new code. Instead of collecting garbage to simplify memory management, you will learn how to use RAII to simplify the management of almost all resources.
Unfortunately, it is often quite difficult to assess where a particular project lies on the horizontal axis. Worse, if it is really close to the intersection, the difference between them is usually not 10 or 15% - it will most likely be on the order of 2: 1 or 3: 1. In many cases, the choice is the difference between great success and a terrible failure. .
However, I think most of your ratings are mostly incorrect.
Portability: almost everything all over the board. Not as difficult with C or C ++ as most people think, and (unfortunately) is almost as easy with Java as they think.
GUI: Java makes it easy to work with graphical interfaces - both ugly and non-responsive. Qt (for example) has the same mobility, only a little more work, but much nicer.
Speed: rarely there is a reason for choosing one over the other. Yes, C ++ usually wins, but for most applications this will not make any real difference.
As for C, yes, this is useful for small embedded systems. Its main advantage is that it minimizes the environmental structure necessary to obtain a working system. C ++ takes a little more, and Java is much more (although this may not be appropriate if this environment is already guaranteed, such as Java on many mobile phones).