Secondo this question, il metodo standard per determinare la dimensione della memoria di un oggetto in Java è utilizzando java.lang.instrumentation. Dopo alcune ricerche, sembra che non ci sia un modo specifico di Scala per ottenere questo, quindi l'approccio Java dovrebbe valere anche qui.determinare la dimensione dell'oggetto: il modo migliore per utilizzare la strumentazione in scala/sbt
Sfortunatamente, per un programmatore Scala senza sfondo Java non è del tutto semplice adattare questa tecnica in Scala. Le mie domande sono:
Domanda 1
Che cosa esattamente sta succedendo qui? Immagino che il motivo per cui dobbiamo inserire una classe come ObjectSizeFetcher
in un JAR separato sia quello di assicurarsi che sia in qualche modo caricato prima del programma attuale in cui vogliamo usarlo. Suppongo che non sia possibile utilizzare la strumentazione senza la voce Premain-Class
e il parametro -javaagent:TheJarContainingObjectFetcher.jar
?
Domanda 2
C'è un modo semplice per implementare il flusso di lavoro completo in SBT? Attualmente vedo solo una soluzione un po 'ingombrante: prima devo impostare un progetto SBT secondario dove definisco lo ObjectSizeFetcher
e lo impacchetta in un JAR. Finora non ho capito come aggiungere automaticamente la voce Premain-Class
al JAR durante l'imballaggio, quindi dovrei risolverlo manualmente. Di quanto posso aggiungere il JAR risultante alle librerie locali del progetto in cui voglio usare getObjectSize
. Per questo progetto ora devo abilitare fork in run
e utilizzare javaOptions in run += "-javaagent:TheJarContainingObjectFetcher.jar"
. Esiste un flusso di lavoro più semplice (e meno intrusivo) per utilizzare rapidamente la strumentazione all'interno di un progetto SBT esistente? Forse posso dire a SBT direttamente su un Premain-Class
per rendere questo JAR secondario non necessario?
Domanda 3
Consiglieresti un modo completamente diverso di valutare l'utilizzo della memoria di un oggetto in Scala?
mi piacerebbe che ci fosse stato un modo più snello per realizzare questo per Scala all'interno della SBT console REPL .... – matanster