Pregunta

Estoy usando JNI para analizar algún programa.Me pregunto, después de obtener referencia a JCLASS, ¿cómo es posible encontrar el tamaño de la clase subyacente?

Por ejemplo: clase CLS= ENV-> FindClass ("Lee / Boehm / Test");

Desde aquí, ¿cómo puedo evaluar el tamaño de la clase Lee.boehm.test dentro del montón de Hotspot?

gracias Boehm

¿Fue útil?

Solución

Aquí vayas

agent.c

#include <stdlib.h>
#include "jvmti.h"

jvmtiEnv *globalJVMTIInterface;

JNIEXPORT jlong JNICALL Java_util_Util_getObjectSize
  (JNIEnv *jni_env , jclass class , jobject object) {

    jlong objectSize;

     (*globalJVMTIInterface)->GetObjectSize(globalJVMTIInterface, object, &objectSize);

     return objectSize;
}

JNIEXPORT jint JNICALL
Agent_OnLoad(JavaVM * jvm, char *options, void *reserved)
{

  jint returnCode = (*jvm)->GetEnv(jvm, (void **) &globalJVMTIInterface,
      JVMTI_VERSION_1_0);

  if (returnCode != JNI_OK)
    {
      fprintf(stderr,
          "The version of JVMTI requested (1.0) is not supported by this JVM.\n");
      return JVMTI_ERROR_UNSUPPORTED_VERSION;
    }

  return JVMTI_ERROR_NONE;
}

y ./util/util.java

package util;

public class Util {
    public static final native long getObjectSize(Object obj);
}

y test.java

public class Test {

   public static void main(String[] args) {

      System.out.println(util.Util.getObjectSize(new String()));

   }

}

gcc -i / opt / ibm-jdk-bin-1.6.0.9 / incluyen -shared -fpic -o liagent.so agent.c

Java -AgentPath: ./ Liagent.So prueba

Otros consejos

hmmm ... Si te refieres al tamaño de las bytes de clase, entonces sí ... Usarías JVMTI para retransmitir la clase en cuestión que generaría un evento de Classloadhook que escuchas y esto podría darle elClase bytes y el tamaño .... Pero serían idénticos al archivo .class en el disco .... Pero si la clase se genera dinámicamente y es por eso que no puede simplemente mirar el tamaño del archivo .class, entoncesEsta técnica funcionaría ... Puedo escribir el código para usted si lo desea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top