جاوا دارای قابلیت بارگذاری پویا میباشد، یعنی در زمان اجرای یک برنامه وقتی که به یک کلاس احتیاج میشود آنرا بارگذاری میکند. که میتوان اصطلاحا Lazy Loading هم نامید که در ORM هایی مثل Hibernate هم استفاده میشود. Class Loader ها کلاسهای شامل بایت کدها را در یک منطقهای به اسم Runtime Data Areas قرار میدهد و موتور اجرا کننده (Execution Engine) بایت کدها را اجرا میکند.
میتوان از قابلیت های کلاس لودر اشاره کرد به:
ساختار سلسله مراتبی: کلاس لودرها در جاوا در یک ساختار سلسله مراتبی میباشند که شامل ساختار پدر و فرزندی میباشد. که بالاتر از همه آنها Bootrstrap Class Loader قرار دارد.
معدل معاوضهای: بر اساس ساختار سلسله مراتبی بارگذاری شدن کلاسها بین کلاس لودرها واگذار میشود یعنی وقتی یک کلاس بارگذاری میشود بررسی میشود که آیا همچین کلاسی در کلاس پدر وجود داد یا نه، اگر این کلاس وجود داشته باشد و قبلا بارگذاری شده باشد از همان استفاده میکند و در غیر اینصورت یک کلاس جدید بارگذاری میکند.
محدودیت در دسترس بودن: یک کلاس لودر فرزند میتواند در کلاس لودر پدر دردسترس باشد ولی کلاس لودر پدر نمیتواند در کلاس لودر فرزند در دسترس باشد.
کلاس لودر ها فقط میتوانند کلاسها را بارگذاری کنند: یک کلاس لودر میتواند کلاسها را بارگذاری کند ولی نمیتواند آنها را خالی (unload) کند و بجای خالی کردن آنها کلاسها حذف میشوند و کلاس جدید بارگذاری میشود.
هر کلاس لودری فضای دارد که نام کلاسهای بارگذاری شده را بر اساس FQCN یعنی Fully Qualified Class Name در آن ذخیره میکند. زمانیکه یک کلاس لودر میخواهد که کلاسها را بارگذاری کند بر اساس FQCN در نامهای ذخیره شده را بررسی میکند که آیا کلاس درخواست شده در حال حاضر بارگذاری شده است یا خیر؟ حتی اگر کلاس درخواستی در فضای دیگری که مربوط به یک کلاس لودر دیگر است ذخیره شده باشد، آنرا به عنوان کلاسی متفاوت در نظر میگیرد.
ساختار زیر بیانگر ساختار سلسله مراتبی کلاس لودر ها میباشد.
انواع مختلف کلاس لودرها به شرح زیر میباشند:
Bootstrap Class Loader: این کلاس لودر که در ساختار سلسله مراتبی کلاس لودرها در بالاترین مرحله قرار دارد و به عنوان پدر همه کلاس لودرها است زمانی ساخته میشود که JVM اجرا شده و وظیفه آن بارگذاری کردن Java API ها و اشیای ابتدایی جاوا میباشد و برخلاف بقیهی کلاس لودرها بجای جاوا با زبان ماشین پیاده سازی شده است.
Extenstion CLass Loader: وظیفه این کلاس لودر بارگذاری کردن برخی extenstion ها جاوا است مانند Security Extention
Sytem Class Loader: وظیفه این کلاس لودر بارگذاری کردن کلاسهای برنامه است و همچنین بارگذاری کردن کلاسهای موجود در CLASSPATH$ که توسط کاربر مشخص میشود است.
User-Defined Class Loader: وظیفه این کلاس لودر اجرا کردن کلاسهایی است که کاربر میسازد و میتوان بصورت پویا در حال اجرای برنامه این کلاسها را اضافه و یا حذف کرد.
البته framework هایی مثل WAS-Web Application Server برنامه وب را از برنامه اصلی بصورت مستقل اجرا میکند و یا به عبارت دیگر از کلاس لودر های مجزا برای اجرا کردن هر یک از قسمت های وب و منطق برنامه استفاده میکند.
وقتی که یک کلاس لودر میخواهد کلاسی را براگذاری کند، مراحل زیر انجام میشود:
که شرح آنها به این صورت میباشد:
Loading: کلاس مورد نظر در JVM بارگذاری میشود.
Verifying: در این قسمت بررسی میشود که آیا کلاس بارگذاری شده از مقررات و ساختار جاوا و JVM پیروی میکند یا نه، این قسمت زمان برترین و مشکل ترین قسمت لود کلاسها است که اجازهی اجرا شدن کلاس را میدهد و یکی از قویترین ویژگیهای جاوا میباشد، چرا که، کد نوشته شده در این قسمت بررسی میشود تا مخرب نباشد.
Preparing: حافظه مورد نیاز را به کلاسها و فیلدها و متدها و اینترفیس تعریف شده در کلاسها، اختصاص میدهد.
Resolving: تمام مرجعهای استفاده شده در این کلاس را به بارگذاری میکند.
Inittializing: متغییرها استفاده شده در این کلاس را مقدار دهی میکند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.