Rechenschritte und Speicherbedarf eines Algorithmus automatisch bestimmen
-
Hallo,
ich bin in einem Softwarepraktikum vor folgendem Problem. Wir sollen ein "etwas" schreiben, um den Speicherbedarf und die Anzahl der Rechenschritte eines unbekannten Algorithmus zu bestimmten auch unbekannten Eingabeparametern bestimmt.
Es geht dabei möglichst nicht um den Tatsächlichen Speicherbedarf und die Rechenzeit der JVM, sondern mehr abstrakt um die Anzahl der Rechenschritte und z.B. die Anzahl der gespeicherten Integer, Double usw. ...Es handelt sich um Data Mining Algorithmen in Form von Klassen, die alle eine Methode cluster(...) haben, jedoch mit unterschiedlichen Parametern und ach unterschiedlicher Rückgabe.
Der Code das Algorithmus selber soll möglichst nicht angepasst werden, sondern es soll "von außen" gezählt werden.
Ich hatte zunächst an Operatorüberladung gedacht, aber die gibt es ja nicht in Java (auch eine Vorgabe).
Das ganze als Thread zu starten und sich die Rechnenzeit des Threads anzugucken ist auch ungena, da die ja von Rechner zu Rechner variiert. Auch der Speicherbedarf des Algorithmus wäre unter Java ja viel höher als in z.B. Embedded Systemes (wo die Algorithmen nach der Simulation eingesetzt werden sollen).
Dann hatte ich noch daran gedacht, dass es ja für Java Profiler gibt, die die CPU-Auslastung und den Speicherbedarf von einzelnen Methoden bestimmen. Leider sind die aber auf C++-Basis, was leider nicht plattforumunabhängig ist (auch Vorgabe). Aber irgendwie kommunizieren die Profiler ja mit der JVM. Kann man sowas nicht in Java schreiben? Gibt es etwas vergleichbares wo man abgucken kann? Es soll ja kein Riesentool entwickelt werden, sondern nur ein Spezialfall evaluiert werden.Habt ihr eine Idee? Wir stehen ziemlich auf dem Schlauch. Unser Betreuer sagte, dass wir es machen sollen "so gut es geht". Bisher geht es garnicht
Vielen Dank
Joachim
-
Hi
Welche Profiler hast du ausprobiert? Sind die alle in C++ geschrieben? kann ich mir nicht vorstellen.
Von Haus aus kommt doch mit Java ein Profiler mit. Den gibt es doch auf für mehrere Plattformen...
Schau doch mal z.B. Javabuch.de Kapitel: 50.3 Einsatz eines Profilers
dort wird der Standartprofiler benutz. Die erklärung wie das ding funktioniert steht mit sicherheit auch bei Java ist eine Insel.