Reflection is a powerful tool but has traditionally carried with it a performance penalty. This session shows how a combination of InvokeDynamic and bytecode generation can be used to transform a traditional reflection-based library into one in which there is almost no performance penalty. To do so, the presentation starts with a brief need-to-know overview of JVM bytecode and the InvokeDynamic protocol. It then walks through creating a simple JSON marshaling library by using ASM bytecode generation and InvokeDynamic and shows how hand-rolled marshaling code can be rivaled in performance. Techniques for testing this code, including security policies, are also covered. Filmed at JavaOne 2014.