JVM雙親委派機(jī)制的優(yōu)點(diǎn):
提高了類加載的安全性:雙親委派機(jī)制可以確保類的加載是從上往下進(jìn)行的,首先加載的是最頂層的類,然后逐級向下加載。這樣可以防止惡意的類替換或者篡改已經(jīng)存在的類。
提高了類加載的效率:通過雙親委派機(jī)制,避免了重復(fù)加載已經(jīng)存在的類。當(dāng)一個類被加載后,它就會保存在內(nèi)存中,下次再加載該類時,就直接從內(nèi)存中獲取,避免了重復(fù)加載的時間和空間消耗。
簡化了類加載器的實(shí)現(xiàn):雙親委派機(jī)制將不同類加載器的職責(zé)劃分明確,每個類加載器只需要關(guān)注自己的加載范圍,不需要關(guān)注其他類加載器的加載過程,簡化了類加載器的實(shí)現(xiàn)和維護(hù)。
JVM雙親委派機(jī)制的缺點(diǎn):
限制了類加載器的靈活性:雙親委派機(jī)制規(guī)定了類加載器必須按照從上到下的順序進(jìn)行加載,這樣就限制了類加載器的靈活性。有時候,我們可能需要自定義的類加載器加載一些特殊的類,但是由于雙親委派機(jī)制的限制,可能無法實(shí)現(xiàn)。
無法實(shí)現(xiàn)對類的自定義修改:雙親委派機(jī)制會優(yōu)先加載系統(tǒng)內(nèi)部的類,如果我們想對某個類進(jìn)行修改或者增強(qiáng),往往無法實(shí)現(xiàn)。因?yàn)樵诩虞d該類時,會直接從系統(tǒng)內(nèi)部加載,而不會加載我們修改后的類。
可能導(dǎo)致類加載器內(nèi)存泄漏:雙親委派機(jī)制中,每個類加載器都有一個父類加載器,當(dāng)父類加載器無法加載某個類時,才會由子類加載器加載。這樣會導(dǎo)致父類加載器無法回收,可能導(dǎo)致類加載器內(nèi)存泄漏的問題。