AQTime can profile mixed code Java applications, that is, applications where certain parts are in Java (managed code), while other parts are native code (unmanaged code). AQTime can analyze both managed and unmanaged code. It does not require any special preparations for profiling of mixed code, except for cases when modules, which include unmanaged sections, must be compiled with debug information. For example, if the application itself includes both managed and unmanaged code, you have to compile it with debug information to profile its unmanaged sections. See How AQTime Profilers Use Metadata and Debug Information.
There can be two possible cases:
To achieve this, Java has a special API - Java native interface (JNI).
To profile native-code DLL routines called from a Java application, you do not need any special preparations. It is not obligatory to compile your DLL with debug information (although the latter would provide more detailed results). Simply start profiling your Java application as described in the Profiling Java Archives or Profiling Java Classes topic and call the native-code routines. AQTime will trace the moment when non-managed code is called and switch to the appropriate engine.
|Note:||If you start profiling by attaching a profiler to a running Java application, AQTime will only profile native code called from that application. Managed code will not be analyzed.|
AQTime includes a sample that illustrates how you can profile native-code routines that are called from managed Java code.
Compile such applications with debug information. See How AQTime Profilers Use Metadata and Debug Information for a list of detailed instructions for the compiler you use. Perform the actions that invoke the Java Virtual Machine, execute Java code.