Frage

Wie kann ich den Speicher überwachen, indem ein native C-DLL verwendet werden, die von Java über JNI aufgerufen wird? Mit Standard-Java-Monitoring-Tool und Optionen kann ich den Java-Speicherplatz sehen, aber ich kann keinen Speicher durch das C-DLL verwendet, anzuzeigen. Java wird mit ~ 70MB, aber die Aufgabe im Task-Manager zeigt 200Mb +, und ich möchte, um zu sehen, was in diesen 130MB Extra ist, wenn möglich.

War es hilfreich?

Lösung

Sie können die nativen Haufen mit Zählern in der Leistung Montitor überwachen. (Perfmon32) jedoch wird es nicht bricht sie für Sie auf einer pro DLL Basis, auch wird jvm.dll hier aufgenommen werden.

Die meisten Profilierwerkzeuge dort zu einem Prozess herstellen kann und erfassen und Speicherzuordnungen und das Aufheben dieser Zuordnungen verfolgen. Dies ermöglicht es ihnen, zu spekulieren, wo Lecks vorhanden sind. Ein ziemlich gut fand ich, wenn vor kurzem auf der Spur zu Speicherlecks in nativen Code versucht, die von Java genannt wurde, ist Memory Validator

Andere Tipps

Haben Sie versucht, mit Process Viewer tiefer zu graben.

Wenn Sie die Quelle mit dem DLL haben Sie mit Debug-Bibliotheken und möglicherweise ein mem Zuweisung Tracker wieder aufbauen könnte - und Debug mit Visual C ++ Debugger (Sie werden es brauchen zu sagen, die Java-Anwendung zu verwenden).

Wenn Sie nicht die Quelle bekam -. Dann sind die Möglichkeiten begrenzt sind

Ich glaube, dies auch in dem C-DLL zu tun wäre nicht sehr einfach.

Soweit ich die Standard-Java-Monitoring-Tools sammeln Informationen verstehen, indem Sie die Virtual Machine abfragen, also auch wenn das Gedächtnis im gleichen Prozess ist, wenn die virtuelle Maschine weiß, wie Ihre dynamisch verknüpfte Bibliothek zu überprüfen, wird es nicht möglich sein, um zu sehen, alles. Ich glaube, Sie müßten ein externes Tool verwenden oder etwas massive Änderungen an die DLL machen, um seine Speichernutzung zu verfolgen.

Nun, da die DLL nicht wirklich Teil des Haufens Java, ich denke, die genaueste Lesung ein kleines Profilierungsprogramm (entweder ein kleines ein Java / JNI-Programm oder C ++ / C #, usw.) zu schreiben, wäre zu importieren und verwenden Sie die DLL in ähnlicher Weise auf Ihre Bewerbung und nichts anderes tun - nur die DLL verwenden, wie Sie tun -. das resultierende Speicher Profil dieses Profilierungs App eine gute Annäherung an das Speicherprofil der DLL sein sollte

Sie sollten auch testen, ob ein es statisch oder dynamische Speicherform der DLL - nimm Speicher measurments direkt vor und nach der DLL geladen wird, um zu sehen, ob es ein einmaliger Hit von ~ 130 MB, oder wenn der Speicher geht langsam im Laufe der Zeit.

Unter Solaris / Linux, ich habe gehört, dass die Sun Studio Collector / Analyzer ein gutes Werkzeug dafür ist, aber Sie sind in der DLL-Land stecken (oder DLL-Hölle, wie es war)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top