In order to inline method handles at invokedynamic instructions, it is necessary to manipulate MethodHandle and CallSite constants from generated code. Since these objects are created by ordinary user code and subject to usual GC, they are not preallocated in the perm gen.
Currently compiled code requires that any oop embedded as an instruction constant or any other nmethod part must be OopDesc::is_perm. For example, internal method objects and classes and interned strings are permanent so that they can be manipulated from compiled code.
This restriction is a bug for JSR 292. Luckily, there is a simple fix.