Komuniti pembangunan Java sedang hangat memperkatakan tentang plugin Gradle eksperimental baharu yang mendakwa dapat meningkatkan kelajuan masa kompilasi secara dramatik dengan menggantikan javac
tradisional menggunakan pendekatan binary asli. Plugin Gradle Elide memanfaatkan teknologi imej asli GraalVM untuk menghapuskan kelewatan pemanasan JIT yang biasanya memperlahankan kompilasi Java dalam proses pembinaan standard.
Binary Asli Menghapuskan Kesesakan Pemanasan JIT
Inovasi teras di sebalik peningkatan prestasi Elide terletak pada pendekatannya terhadap kompilasi Java. Daripada menggunakan API Tooling lalai Gradle yang menjalankan javac
dalam JVM daemon Gradle dan mengalami kelewatan pemanasan JIT, Elide menggunakan versi binary asli pengkompil. Ini bermakna kompilasi bermula serta-merta pada kelajuan penuh tanpa menunggu Java Virtual Machine mengoptimumkan kod melalui kompilasi Just-In-Time.
Plugin ini berfungsi dengan mengkonfigurasi tugasan JavaCompile
Gradle untuk memisahkan proses dan menggunakan executable tersuai yang memanggil elide javac
sebagai ganti javac
standard. Memandangkan Elide dibina sebagai imej asli GraalVM, ia melangkau keseluruhan fasa pemanasan JIT yang biasanya memperlahankan kerja kompilasi bersaiz kecil hingga sederhana.
Keperluan Teknikal
- Elide mesti dipasang secara berasingan
- Penciptaan shim
javac
secara manual dalamJAVA_HOME/bin/elide-javac
- Fail manifes
elide.pkl
diperlukan untuk pengurusan kebergantungan - Serasi dengan JDK 8+ melalui flag
--source/--target/--release
Peningkatan Prestasi Ketara untuk Projek Lebih Kecil
Perbincangan komuniti mendedahkan bahawa faedah prestasi paling ketara untuk projek di bawah 10,000 kelas. Dalam senario ini, plugin boleh memberikan kompilasi sehingga 20x lebih pantas berbanding javac
standard. Ini menjadikannya amat berharga untuk aplikasi perusahaan biasa dan pangkalan kod yang lebih kecil di mana overhed pemanasan JIT mewakili bahagian ketara daripada jumlah masa pembinaan.
Kelebihan prestasi berpunca daripada fakta bahawa banyak projek Java tidak pernah mencapai ambang di mana pengoptimuman JIT menjadi bermanfaat. Tumpuan Gradle pada kompilasi tambahan dan caching pembinaan, walaupun membantu atas sebab lain, sebenarnya bertentangan dengan mencapai keadaan JIT hangat yang akan menjadikan javac
tradisional kompetitif.
Tuntutan Prestasi
- Sehingga 20 kali ganda lebih pantas dalam kompilasi berbanding
javac
standard - Paling berkesan untuk projek di bawah 10,000 kelas
- Binari natif menghapuskan kelewatan pemanasan JIT
- Pengendalian HTTP yang dioptimumkan untuk penyelesaian kebergantungan
Penyelesaian Kebergantungan Mendapat Rangsangan Kelajuan Asli
Selain kompilasi, Elide juga mempercepatkan penyelesaian kebergantungan Maven dengan membenamkan penyelesai Maven dalam binary asli. Plugin boleh menggantikan mekanisme pengambilan kebergantungan Gradle sepenuhnya, memuat turun JAR ke struktur repositori serasi Maven tempatan yang kemudiannya boleh digunakan oleh Gradle secara langsung.
Gradle nampaknya terhad kepada HTTP/1.1 dan pengumpulan sambungan yang lemah sehingga hari ini, jadi tidak sukar untuk mengatasinya.
Pendekatan ini menyediakan semantik penyelesaian yang sama dengan Maven sambil memberikan prestasi lebih pantas melalui pelaksanaan asli dan pengendalian HTTP yang dioptimumkan.
Pilihan Konfigurasi Plugin
enableInstall
: Gunakan penyelesai Maven Elide (lalai: benar apabila elide.pkl hadir)enableJavaCompiler
: Gunakan Elide untuk kompilasi Java (lalai: benar)enableProjectIntegration
: Dayakan kesedaran projek Elide (lalai: boleh dikonfigurasi)manifest
: Laluan ke fail manifes projek (lalai: elide.pkl)
Pemasangan Memerlukan Langkah Persediaan Manual
Pada masa ini, menggunakan plugin memerlukan penciptaan shim manual dalam direktori JAVA_HOME
yang mengalihkan panggilan javac
kepada elide javac
. Pengguna juga mesti memasang Elide secara berasingan sebelum menggunakan plugin. Pasukan pembangunan mengakui kerumitan persediaan ini dan merancang untuk menghapuskan keperluan shim JAVA_HOME
dalam versi akan datang.
Plugin juga memerlukan fail manifes elide.pkl
untuk pengurusan kebergantungan apabila menggunakan ciri penyelesaian kebergantungan yang dipertingkatkan, walaupun batasan ini dijangka berubah apabila projek semakin matang.
Plugin Gradle Elide mewakili pendekatan menarik untuk menyelesaikan isu prestasi kompilasi permulaan sejuk Java. Walaupun masih eksperimental dan memerlukan beberapa persediaan manual, ia menawarkan peningkatan prestasi yang menarik untuk pembangun yang bekerja dengan saiz projek Java biasa. Apabila perkakas semakin matang dan persediaan menjadi lebih mudah, ia boleh menjadi pilihan menarik untuk pasukan yang ingin mempercepatkan proses pembinaan mereka tanpa mengubah aliran kerja pembangunan asas mereka.
Rujukan: Plugin Gradle Elide