Wenn die Anwendung durch Änderungen des Quellcodes optimiert wird, lassen sich weiterreichende Verbesserungen erzielen, als dies mit dem Compiler möglich ist. Es ist jedoch zeitaufwändiger; somit ist es wichtig zu wissen, an welcher Stelle Änderungen an den Algorithmen die meisten Vorteile bringen. Bei der Entscheidung, ob eine ganze Funktion oder nur ein paar Codezeilen neu zu schreiben sind, sind Informationen über die Ausführungszeit jeder Zeile hilfreich. Mit der »Aufrufkettenansicht « lassen sich Bereiche der Aufrufstruktur identifizieren, die speziell der Optimierung bedürfen.
Die zeilenweise Leistungsanalyse in der Code-Ansicht zeigt, an welcher Stelle es genügt, nur einige Codezeilen zu ändern und nicht etwa die gesamte Funktion. Wenn beispielsweise in einer bestimmten Funktion eine einzige Schleife viel Zeit beansprucht, kann sich der Entwickler auf diese konzentrieren und den Rest außer Acht lassen.
Leistungseinbußen sind häufig auf einige wenige Ursachen zurückzuführen, und es gibt verschiedene Techniken, diese Probleme zu umgehen:
Wenn kleine Schleifen oft durchlaufen werden, verschwendet die Anwendung möglicherweise viele Zyklen nur durch die Verarbeitung der Schleife. Es kann daher von Vorteil sein, die Schleifen aufzulösen und die Anzahl der Zyklen zu reduzieren.
Wenn der Profiler anzeigt, dass bestimmte Werte sehr oft verwendet werden, kann der Entwickler dies als Anregung nehmen, den Wert mit einer systemeigenen Prefetch-Anweisung, die in den »Compilation Tools« zur Verfügung steht, in den L1-Cache für häufigen Zugriff zu laden.
Verzögerungen treten häufig auch durch Interlocks auf, bei denen von einer Anweisung benötigte Register noch von einer vorhergehenden Anweisung belegt werden. Dies hält die CPU an.
Jene Situation lässt sich verbessern, indem einem Arbeitsblock mehr unabhängige Aufgaben hinzugefügt werden. Inline-Funktionsaufrufe flachen das Programmdiagramm ab und ermöglichen dem Compiler, mehr unabhängige Aufgaben zu erkennen. Der Compiler stellt Funktionen automatisch inline, wenn die betreffende Funktion in derselben Kompilierungseinheit oder als Inline-Funktion definiert ist.
Diese Änderungen lassen sich schnell vornehmen, im Anschluss überprüfen, sowie mit den ursprünglichen Ergebnissen der Profilerstellung vergleichen. Durch die Integration in die Entwicklungsumgebung »Eclipse« können Entwickler den Quellcode bearbeiten oder Optimierungen aufgrund von Profilerstellungsstatistiken durchführen. Anschließend erstellt man einen neuen Build, gibt diesen zur Ausführung frei, woraufhin sich ohne Verlassen der Eclipse-Umgebung Profile erstellen lassen.