All code eventually comes down to machine code. There are only certain ways to represent data in memory. I would imagine that the ASM code depends entirely on the compiler and if you're performing optimization. For byte-code-compiled languages, the source is compiled to bytecode and then run through an interpreter. There may even be a JIT (Just-In-Time) compiler that compiles that bytecode into native machine-code.
You have to realize that OOP is an abstraction or paradigm that makes it easy for the programmer to solve problems. As such, it doesn't have any real bearing on efficiency. Assembly code usually has a section that deals with describing or allocating data, and another section for program code. So all compiled code ends up in this state.
If you are actually concerned about efficiency of code generated, you should be looking at the compilers themselves and reading about the kind of code they generate. Most modern compilers perform all sorts of optimizations (and you can even tell them what level of optimization you want). Of course, this mostly comes into play when you are programming in an embedded environment.
The paradigm mostly doesn't have a bearing on efficiency, but of course, some languages are more efficient in certain environments. C, for example, performs very well in an embedded environment. The ultimate aim is to choose the right tool for the job. For example, I'm sure you could use brainf*ck to write embedded code, but brainf*ck is not a very convenient language. You might be better off with C. If you want to do embedded programming, but want to use the OOP paradigm, you can try doing embedded C++ or even embedded Java.