Not really a explanation but in general terms: a primitve can usually be reflected directly in memory (say written directly). For wrappers we need the whole “overhead” of an object, a pointer is needed which then points to the place in memory where the actual values are stored. This needs to be processed and the process of wrapping comes on top. So, it is more “work” needed hence the “overhead” mentioned.