I'm sorry, but Java, C#, and JIT compiled languages are never going to fully replace C/++, just as C/++ will never (and cannot possibly) completely replace assembly.
No, it never will fully replace. However, Java/C# are going to become the next "general purpose" language of choice, and will become the common language everyone knows/uses. Schools already have replaced teaching C/C++ with Java for programming classes, and so we can assume that's what the programs of tomorrow will be using.
I have no doubt that Java/C# will continue to become more popular for a portion of the market than C/++ (as they already have), but replace?
If you want to be nit-picky, then no, it won't fully replace C/C++. I doubt anything will for several more decades.
I just don't see that hapening. A computer CANNOT run java bytecode as fast as precompiled c/c++.
In theory, compiled code will always run faster than JIT bytecode, I agree, but average programmers aren't going to be spending hours optimizing every single line of code, and Java/C++ has a big advantage here. Writing performance-based programs is a marathon, not as sprint, and since 95% of optimization is about high-level ideas it doesn't really matter if Java/C# lacks low-level features.
Anyway, Java/C# do have some features which
can make them run faster than average C/C++ code:
1. Most c/c++ programs are compiled to support LCD of computers. Good thing about bytecode is that it can be compiled to use every feature the computer has, and also make optimizations during run-time.
2. C/C++ was not designed with multi-threading/networking in mind, Java/C# was. Computers are going to get more and more cores, and the higher-level of the newer languages is going to end up with better threaded programs.
3. Any gains in C/C++ compilers will benefit newer languages, as they run on C/C++.
4. Computer vendors are going to push their processors to running Java/C# faster. I will say this is similar to how processors have been directed by C++ - such as optimizing virtual function calls.
5. Java/C#
code becomes obsolete slower than C/C++,and especially assembly. If I write the most optimized program in assembly, it won't be the best for long as new processors come out and assembly optimization tricks change. In C/C++, your code will last longer, but low level code style does change, and you will have to rethink optimizations every few years or so. Because Java is higher-level and JIT, it stays "fresh" for very long time.
6. Java is inherently easier to optimize than C++. C++ is just too complex, and a large portion of optimization tricks require non-standard extensions.
Currently, these things aren't making Java/C# faster than C/C++, but the gap will close as time goes by.
P.S.
People suck at predicting future of technology, and so I may be entirely wrong. Just keep in mind that this is all speculation and we won't know until the future arrives.