cosa succede a livello di interprete Java quando viene lanciato IncompatibleClassChangeError?

3

Sono un noob agli interni di JVM.

Qualcuno può spiegare cosa succede a livello di interprete Java quando viene lanciato IncompatibleClassChangeError?

Sto affrontando un problema simile a quello descritto qui: link ma avendo difficoltà a capire questo commento (citato dalla stessa pagina):

This is actually a bug in the interpreter's handling of IncompatibleClassChangeError. The bug is that the logic that checks for invoking a method on a null object, which results in a NullPointerException, is executed before the logic that checks for IncompatibleClassChangeError. In the case of a non-static method becoming static this will cause the interpreter to read a value of the stack which isn't guaranteed to be valid. In this test case it reads a value one above the top of stack which may or may not have a valid value in it. If you modify the test slightly to push a couple nulls and then pop them off before doing the invocation, the test will fail on every vm JavaSoft has shipped. Here's the modified test...

    
posta xerocool 20.01.2016 - 11:37
fonte

1 risposta

1

Posso dire che il problema non è fisso ma è chiuso come non riproducibile.

Yes but I still couldnt understand this line: " In the case of a non-static method becoming static this will cause the interpreter to read a value of the stack which isn't guaranteed to be valid."

Molto probabilmente il punto è che nel caso del metodo statico la cella superiore dello stack è ignorata quando il metodo è invocato e potrebbe contenere null (o undefined valore). Nel caso del metodo non statico la cella superiore contiene il riferimento this .

Can someone explain what happens at Java interpreter level when IncompatibleClassChangeError is thrown?

Ti rimando alla risposta

    
risposta data 06.02.2016 - 07:29
fonte

Leggi altre domande sui tag