where is this Heap actually, is it a virtual memory in RAM created by JVM? or is this physical?
When the JVM is started, it's loaded by an operating system into system memory (RAM). The operating system manages the system memory, including determing whether to put the memory where the JVM is executing in physical memory or in virtual memory. The JVM doesn't manage this.
Any decent book on operating system concepts should cover memory management in more detail.
The "Heap" memory used by the JVM is part of the total memory the operating system allocates to the JVM. The JVM does manage what data is in the "Heap", but it has no control over whether this section of "Heap" memory is in physical memory or in virtual memory.