opcode ‘invokespecial’ ‘invokespecial’ invokes <init> method of specified class. <init> is name of constructor. This opcode consumes a reference, so JVM has to call ‘dup’ at first. Finally instance is fully invokespecial initialized!

key point Opcode ‘new’ doesn’t call constructor. We can get an reference to uninitialized instance. Data size is fixed at first (by opcode ‘new’). JVM can decide size from class definition. We have to create new instance to expand data size. @see ArrayList#grow(int).