memuat kelas dengan classloader yang berbeda untuk membongkarnya dari JVM bila tidak diperlukan

Dalam aplikasi saya, saya menggunakan ServiceLoader untuk memuat modul (kelas dari file .jar) dengan ClassLoaders yang berbeda untuk membongkar sepenuhnya ketika tidak diperlukan dari konteks aplikasi dan dari JVM itu sendiri. Saya tahu mungkin ini bukan topik umum "membongkar kelas dari JVM", ada beberapa kondisi agar hal itu terjadi, jadi saya melakukan upaya yang diperlukan. Untuk memastikan apakah semuanya berfungsi seperti yang diharapkan, saya menelusuri pemuatan dan pembongkaran kelas dengan -XX:+TraceClassLoading dan -XX:+TraceClassUnloading, info dari parameter ini menunjukkan kepada saya bahwa saya dapat melakukan pembongkaran lengkap modul apa pun dari aplikasi mi dan dari JVM itu sendiri (pembongkaran dari JVM terjadi selama GC lengkap). Semua ini tampaknya berfungsi dengan baik... tetapi pertanyaan saya adalah mengapa file .jar dari mana kelas modul dimuat tetap terbuka oleh JVM?, bahwa .jars tidak dapat dihapus tetapi JVM mengatakan telah membongkar kelas dari mereka . Jelas ini terjadi selama eksekusi JVM, tetapi mengapa tetap membuka file .jar itu jika JVM tidak memiliki kelas yang dimuat darinya?, adakah yang bisa saya lakukan untuk memaksa JVM membebaskan file .jar itu?


person Wyvern666    schedule 08.09.2011    source sumber


Jawaban (1)


Masalah kelas memuat/membongkar harus dieksplorasi secara mendalam dalam wadah web yang berbeda.

Beberapa googling menunjukkan bahwa Tomcat 6.x memiliki opsi antiJARLocking opsi tersebut digunakan dalam sumber Tomcat di http://svn.apache.org/repos/asf/Tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/

Silakan baca sumbernya dan Anda akan mendapatkan contoh kode muat/bongkar di sana.

person ya_pulser    schedule 08.09.2011
comment
Info tentang antiJARLocking mengatakan: Jika benar, classloader Tomcat akan mengambil tindakan ekstra untuk menghindari penguncian file JAR ketika sumber daya diakses di dalam JAR melalui URL. Ini akan berdampak pada waktu startup aplikasi, namun terbukti berguna pada platform atau konfigurasi di mana penguncian file dapat terjadi.. Jadi Anda menyarankan untuk melakukan hal yang sama seperti kucing jantan?. Dan JVM tidak cukup pintar untuk merilis file? - person Wyvern666; 09.09.2011