Portable Instrumentation and Profiling of Java Bytecode