Tak sobie myślę, że te metody pociągają ze sobą automatycznie jakiś stan, który jest sporym obciążeniem dla prostych obiektów (tak z kilka bajtów na każdy obiekt do trzymania informacji do synchronizacji).
Gdyby tak zrobić klasę wbudowaną np Semaphore extends Object, o funkcjonalności obecnego Objectu, a nowy Object byłby całkowicie pozbawiony wait i notify to może poprawiłoby to wydajność.
W zasadzie, to jeżeli moje powyższe przemyślenia nie mijają się z prawdą, to wtedy ArrayList<OgołoconyIntegerBezWaitINotify> miałoby taką samą wydajność i zajętość pamięci jak int[] (zakładając że JVM byłby w stanie zastąpić tablicę referencji do obiektów przez tablicę tych obiektów, oczywiście pod warunkiem że stanem tego obiektu byłyby same typy prymitywne). To doprowadziłoby do sytuacji kiedy Integer miałby taką samą wydajność jak int i nie trzeba byłoby w ogóle udostępniać intów.