This looks like the Apple article of interest: https://developer.apple.com/documentation/apple-silicon/porting-just-in-time-compilers-to-apple-silicon.
According to the article, the page should be mapped with MAP_JIT. Before instructions are written, pthread_jit_write_protect_np should be called. After writing the jitted code, call pthread_jit_write_protect_np again and call sys_icache_invalidate. It looks like the OpenJDK folks are also experiencing similar issues. Jeff