You have to differentiate between the changes in the JVM and the changes in Java. And in both cases "changes" in most cases means "additions" (since Java's backwards compatibility). Sometimes apis are removed (e.g. some crytography functions), then they're no longer present to be used by Kotlin as well. If apis are added the the jvm, then there're immidiately available from Kotlin as well, e.g. the new foreign function and memory interface, or when the Jvm offered VirtualThreads. Now
Kotlin can use VirtualThreads (even though mostly it makes more sense to use coroutines). Without any changes necessary on Kotlin's side.
And if stuff is added to Java, Kotlin has to make sure that it can interact with that new Java construct. E.g. when Java got Records, Kotlin had to adapt to be able to
instanciate Java records and als to be able to specify that you want the jvm byte code of your data class to be a Record.