Почему запуск javap в компилированном классе Scala показывает странные записи в постоянном пуле?

При запуске javap -v на скомпилированном классе, полученном из этого бита Scala (окончание версии 2.8.1):

class Point (x: Int, y: Int)

Я получаю следующий вывод для постоянных записей пула, а также несколько звуковых сигналов терминала, указывающих непечатаемые символы?

#19 = Utf8               Lscala/reflect/ScalaSignature;
#20 = Utf8               bytes
#21 = Utf8               \t2\"\t!!>Lg9A(Z7qift4A\nqCA\r!BA
                                                        aM\4
                                                            -\tAA[1wC&Q\nTWm;=R\"\t
                                                                                     E\tQa]2bYL!a\tMr\1PE*,7\r\t+\t)A-\t/%:$

eDu\taP5oSRtDc!CAqA!)Qca-!)!da-
#22 = Utf8               RuntimeVisibleAnnotations
#23 = Utf8               Point
#24 = Class              #23            //  Point

Любая идея, что происходит и почему? Я никогда не видел двоичный мусор в записи CONSTANT_Utf8 раньше.

Я использую OpenJDK 7 build на Mac 10.6, если это имеет значение - я буду пытаться реплицировать завтра, когда у меня есть другие операционные системы, и будет соответствующим образом обновляться.

Ответы

Ответ 1

Элемент ScalaSignature содержит информацию о дополнительном типе, который нужен Scala. Он теперь сохраняется (кодируется, очевидно) в аннотациях, чтобы он мог быть доступен для инструментов отражения.