JVM was originally designed for set top boxes (STB) I believe, the problem there being a variety of architectures, thus a Virtual Machine solved the problem of write code to the virtual machine and not the physical machine and applications could run on various STB's.

OpenTV provided such a 'middleware' where the main language was C on such a VM, and was (possibly still is) widely used.

NestedVM was another early attempt (2004) to run C, C++, Fortran, etc. on the JVM, but at substantial performance degradation. This was a clever hack that ran a Java coded MIPS emulator and loaded a compiled binary into a large array. Performance was 20-40% of native speed, but still fast enough for some applications, such as SQLite as a JDBC driver.

Website, source repo, and paper seem to still be available, try for dead links:

Is there an implementation that can be used for experimenting or verifying performance claims? I could not find anything. edit: Found a reference there in case it helps others
Only 7% slower seems amazing. To me at least.
How are pointers implemented in a language that doesn't support them?
It's good only if you can end up in compiling JVM with it.
Way over my head here , but can someone perhaps explain the value and/or use-case of running c within a jvm?