В байт-коде хранится много метаданных о функциях уровня Java, которые не оказывают прямого влияния на выполнение байт-кода. Это полезно по нескольким причинам. Во-первых, в Java есть библиотеки отражений, которые предоставляют доступ к этой информации, поэтому она должна быть доступна JVM во время выполнения. Во-вторых, он позволяет вам компилировать только двоичные библиотеки.
Другим примером «бесполезной» функции являются предложения throws (хранящиеся в качестве необязательного атрибута в байт-коде). Они необходимы, чтобы вы могли компилировать файлы классов без исходного кода, но не влияют на выполнение байт-кода.