yeah, because passing a implicit "this" pointer in C++ and a typed object pointer to a function are so vastly different in storage sizes. Not. And seriously, if you are loading tons of useless data into an object, you've completely missed the point of Object oriented programming in the first place. So don't blame your failure to use logic and reasoning in OOP as a general case that applies to all software.
C# and Java use garbage collection, which involves nondeterministic reclaimation of objects, which will affect performance. Sure, GC may allow for easier lockfree structures, but it simply pushes the delay to the GC, and a longer term storage of the deleted objects which then have to be reclaimed by the properly implemented lockfree GC. It's far more important to make sure your data fits in cache lines to prevent cache trashing, which means that your data has to be reloaded into the CPU's cache from higher level caches, like L3 or RAM. Just take a look at Intel's Thread Building Blocks. None of their concurrent data structures are lockfree, but do make sure to properly allocate objects to fit cache lines.