Question: Compiling is a process to conversion from one level of abstraction to lower level. Meanwhile transpiling is a process of conversion from one level of abstraction to another at same level like converting java code to Kotlin/python. That is my understanding of the two process. Could someone please explain it in terms of java code and jvm byte code. And is my inference correct?

Answer: 
Higher/Lower levels of abstraction from human language to machine language
==========================================================================

A compiler translates from a higher level language to a lower level language. By higher/lower we mean how abstracted from machine language. So this would include Java language to bytecode. Bytecode is closer to machine language, and further away from human language.

A transpiler converts between languages of comparable levels of abstraction. Converting from [EcmaScript](https://en.wikipedia.org/wiki/ECMAScript) 6 to EcmaScript 5 for compatibility with older web browsers would be one example. Converting from Java language to [Kotlin](https://en.wikipedia.org/wiki/Kotlin_(programming_language)) would be another, or [Swift](https://en.wikipedia.org/wiki/Swift_(programming_language)) to Kotlin. 

See Wikipedia: <https://en.wikipedia.org/wiki/Source-to-source_compiler>

Intermediate representation
---------------------------

In particular, [bytecode compiled from Java](https://en.wikipedia.org/wiki/Java_bytecode) language and [bitcode compiled via LLVM](https://en.wikipedia.org/wiki/LLVM#Intermediate_representation) (from Swift, [Rust](https://en.wikipedia.org/wiki/Rust_(programming_language)), etc) are known as [Intermediate Representation (IR)](https://en.wikipedia.org/wiki/Intermediate_representation). An IR is designed for further processing, optimizing, and translating on its way to becoming [machine language](https://en.wikipedia.org/wiki/Machine_code).
It works as explained below:

> 
> Firstly java source code is converted into Bytecode file by the translator named “Compiler”. The byte code file gets name with .class extension and javac (java compiler) is the tool to compile the .java file.
> 
> 
> Then,
> 
> 
> `java` is a tool use to invoke Java Interpreter “JVM”. Now, the work of JVM starts. When JVM invoke,
> 
> 
> 1. a subprogram in JVM called Class loader (or system class loader) starts and load the bytecode into OS memory( or RAM).
> 2. another subprogram Bytecode Verifier verify and ensure that the code do not violate the security rules. That’s why the java program is much secured and virus free.
> 3. Then last subprogram Execution Engine finally converts bytecodes into machine code. The name of that engine are in use today is JIT Just In Compiler.
> 
> 
> 

You can read about the same here : <https://www.quora.com/How-does-the-Java-interpreter-JVM-convert-bytecode-into-machine-code>