In addition to other answers, it would perhaps be useful to formulate it this way:
There are very few programs (on PC) that run pure machine instructions only, and only depend on hardware. Mostly they are bootloaders, which (eventually) start some kind of operating system.
The operating system generally allows you compile your programs to machine instructions and use them, but it requires your program's machine code to comply with particular template (EXE, ELF, etc. binary file format), which the particular operating system recognizes, and in return for staying with that template, the operating system actually "knows" how to run it, and provides a lot of its resources and libraries that your programs can call and use (networking, filesystem access, etc.).
Without an operating system, no userland program would launch. That is the reason machine instruction compiled programs are generally usable only on their target operating system.
Bytecode compiling systems lets you go halfway. Part of the work of translating your program to machine code is done during compilation. But the result is not in a format that is supported by the usual operating systems (Windows, Linux, etc.). It is a bytecode, that requires additional environment on top of operating system, to actually run your code. Java is one of those languages.
The bonus of bytecode is that it generally can be used without change on any machine that has the appropriate bytecode environment. Sort of "compile once, run everywhere" system, but there are also caveats.
And finally we have your interpreted languages, which require you to launch the whole language interpreter every time you launch the program, and for the interpreter to do all the work every time. The source code of your program is usually available for inspection and change at any moment, and changes can be done without (sometimes slow) recompilation process. Also, interpreted language programs frequently don't have to be modified when used on different architecture machines.
As you might imagine, the more environment is needed for launching the program every time, the slower the program's response might be. However, for modern computers and modern interpreters, the difference in many cases is not that dramatic as it used to be. Still, for many resource intensive programs, compilation to executable machine code (OS level) is still preferred or sometimes the only way for program to be able to work acceptably.
Also, as some answers and comments have noted, the lines have blurred between these three modes, some interpreters do bytecode, some machines have been developed which can understand bytecode directly. Nevertheless, it is still useful to know what do you generally need to have to run what kind of code.