Program Counter [Resolvido]

7 respostas
J

Alguém sabe dizer como eu posso pegar o program counter de uma thread sendo executada, após uma determinada instrućão?

7 Respostas

J

Ou ainda: pegar o program counter da própria jvm.

T

Isso é mais difícil que parece, e normalmente não é relevante. É que um determinado código pode em determinado momento estar sendo interpretado (nesse caso o “program counter” da CPU não faz muito sentido porque aponta para um endereço que está no interpretador do Java, ou seja, dentro de jvm.dll), e em outro momento ter sido compilado para código nativo. Mesmo quando foi compilado para código nativo, pode ser que a JVM resolva recompilar a mesma classe para um código nativo diferente em posição diferente na memória, depois de algum tempo, e uma determinada linha de programa no Java corresponderia a ainda outro “program counter” no código nativo.

Isso só é relevante para quem vai construir um debugger para o Java. E mesmo assim a JVM faz algumas mágicas para “esconder” o program counter - ela mostra o programa ao debugger como se ele estivesse sendo interpretado, mesmo que ele tenha sido compilado, o que é realmente uma grande mágica.

J

A intencão é instrumentar os bytecodes de uma aplicaćão para fazer checkpoint. Nas pesquisas, topei com essa história do pc register (program counter da JVM), mas nenhum dos artigos consultados explica o que é feito. Poderia me falar mais sobre esse jvm.dll .

T

Para efetuar instrumentação de uma aplicação, procure “java agent”:

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/package-summary.html

J

Obrigada! A parte de como instrumentar nós já resolvemos. O problema é que para salvar o estado da aplicaćão, temos que salvar o program counter e nem temos a menor idéia de como fazer isso… :shock:

T

Puxa, agora não sei mesmo. Como é que vocês salvam o estado da aplicação? Vocês põem a aplicação em modo de depuração via JVMTI ou coisa parecida?

J

Na verdade nem nós sabemos…hehe. Hoje que nós comećamos a pensar nessa questão “o que salvar num checkpoint” e todos os artigos consultados falam em salvar o program counter, para que a jvm saiba de onde deve recomećar a executar o programa. Talvez estejamos até indo longe demais, ao querer pegar o program counter da jvm. Certamente é um assunto para mais algumas horas de pesquisa (e para uma boa conversa com nosso orientador). Obrigada pela atenćão!

Criado 11 de outubro de 2007
Ultima resposta 11 de out. de 2007
Respostas 7
Participantes 2