Nach this question ist die Standardmethode zum Ermitteln der Speichergröße eines Objekts in Java mithilfe von java.lang.instrumentation. Nach einigen Nachforschungen sieht es so aus, als gäbe es keinen Scala-spezifischen Weg, um dies zu erreichen, daher sollte der Java-Ansatz auch hier gelten.ermitteln Größe des Objekts: beste Möglichkeit, Instrumentierung in scala/sbt zu verwenden
Leider ist es für einen Scala-Programmierer ohne Java-Hintergrund nicht ganz einfach, diese Technik in Scala anzupassen. Meine Fragen sind:
Frage 1
Was genau ist hier passiert? Ich denke, der Grund, warum wir eine Klasse wie ObjectSizeFetcher
in eine separate JAR setzen müssen, ist sicherzustellen, dass es irgendwie vor dem eigentlichen Programm geladen wird, wo wir es benutzen wollen. Ich nehme an, es ist nicht möglich, Instrumente ohne den Eintrag Premain-Class
und den Parameter zu verwenden?
Frage 2
Gibt es eine einfache Möglichkeit, den kompletten Arbeitsablauf in SBT zu implementieren? Derzeit sehe ich nur eine etwas umständliche Lösung: Zuerst muss ich ein sekundäres SBT-Projekt einrichten, wo ich ObjectSizeFetcher
definiere und es in ein JAR verpacken. Bis jetzt habe ich nicht herausgefunden, wie man automatisch den Premain-Class
Eintrag zum JAR während des Verpackens hinzufügt, also würde ich das manuell lösen müssen. Dann kann ich die resultierende JAR zu den lokalen Bibliotheken des Projekts hinzufügen, wo ich getObjectSize
verwenden möchte. Für dieses Projekt muss ich jetzt fork in run
aktivieren und javaOptions in run += "-javaagent:TheJarContainingObjectFetcher.jar"
verwenden. Gibt es einen einfacheren (und weniger aufdringlichen) Arbeitsablauf, um die Instrumentierung innerhalb eines bestehenden SBT-Projekts schnell zu verwenden? Vielleicht kann ich SBT direkt über eine Premain-Class
sagen, um diese sekundäre JAR unnötig zu machen?
Frage 3
Möchten Sie eine ganz andere Art und Weise empfehlen die Speichernutzung eines Objekts in Scala zu bewerten?
ich es wünschte, ein schlanker Weg gewesen war, dass innerhalb der SBT für Scala zu erreichen Konsole REPL .... – matanster