I found thread on the core-libs-dev mailing list which discusses saving @FunctionalInterface annotation. The highlight mentioned here is to allow third-party tools to use this information for code analysis / verification and to allow non-Java JVM languages to correctly display their lambdas for functional interfaces. Some excerpts:
Joe Darcy (original committer @FunctionalInterface ):
We intentionally made this annotation by saving runtime, allowing it to also request various tools at runtime, etc.
Brian Goetz
There is an advantage for languages other than Java, which can use this as a means to determine if the interface is suitable for switching to the SAM conversion engine. JDK support for lambda conversion is available for other languages.
It seems that it is not used by the JVM itself, it is just an additional feature for third-party tools. Creating visibility in annotations is not a big price, so there seems to be no good reason not to.
source share