Pergunta

Eu estou usando JNI para analisar algum programa.Eu só me pergunto, depois de obter jclass de referência, como é possível encontrar o tamanho da classe base ?

por exemplo:classe cls = env->FindClass("Lee/Boehm/Teste");

a partir daqui como posso avaliar o tamanho da classe Lee.Boehm.Teste dentro hotspot pilha ?

Obrigado Boehm

Foi útil?

Solução

Aqui você ir

agente.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;
}

e ./util/Util.java

package util;

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

e 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/include -shared-fPIC -o libagent.então agente.c

java -agentpath:./libagent.para Testar

Outras dicas

hmmm .... se você quer dizer o tamanho dos bytes de classe, então sim ..... você usaria jvmti para retranformar a classe em questão que geraria um evento de classeLowhook que você escuta e isso poderia dar-lhe obytes de classe e o tamanho .... mas eles seriam idênticos ao arquivo .class no disco .... mas se a classe for gerada dinamicamente e é por isso que você não pode apenas olhar para o tamanho do arquivo .classEsta técnica funcionaria ..... Eu posso escrever o código para você, se você quiser.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top