Java Object Oriented
نگاهی به برنامه نویسی شی گرا در جاوا
نگاهی به برنامه نویسی شی گرا در جاوا
Profiler و APM ابزاری هایی برای مانیتورینگ و دیباگینگ پرفورمنس برنامه ها جاوا در زمان توسعه استفاده میشه.
تو این پست یکسری بدیهیات رو میگم، راجع یکسری از یکی دوتا ابزار خیلی خلاصه صحبت میکنم و سعی میکنم یه کار مسخره انجام بدم
چهار نوع رفرنس توی جاوا داریم:
GC با آزاد کردن خودکار حافظه باعث سریعتر شدن برنامه نویسی میشه و از نوشتن کدهای اضافه جلوگیری میکنه.
در قدیم اینجوری بود که ما متد finalize رو توی اشیا بازنویسی میکردیم و وقتی GC میخواست اون شی رو نابود کنه این متد رو صدا میزد و ما اگه لاجیک خواصی داشتیم اونجا مینوشتیم.
اما به دلیل مشکلاتی که این کار بوجود میاورد اون توی جاوا ۱۱ به بعد deprecated شده.
یکی از بزرگترین مشکلاتی که بوجود میاد این هستش که این متد توی thread مربوط به GC اجرا میشه و باعث بوجود اومدن مکث در thread اصلی میشه.
حالا باید چیکار کنیم؟
باید توی شی پدر اون شی که داره نابود میشه یه Cleaner بسازیم و شی مورد نظر و به همراه یک runnalbe توی اون register کنیم.
JVM دقیقا مثل باقی برنامه ها یک فضا رو توی رم اشغال میکنه و خودش کامل اون رو مدیریت میکنه. ستا فضای کاملا جدا از هم داریم که JVM دادههای زمان اجرا و کدهای کامپایل شده رو اونجا نگهمیداره.
ما در مورد اینکه برنامهها چجوری اجرا میشن صحبت کردیم ولی درباره اجرا کننده برنامهها هیچ صحبتی نکردیم.
bytecode ها اینجا اجرا میشن. Execution Engine دستورات رو خط به خط اجرا میکنه.
JVM داخل رم یک فضا برای بارگذاری دادهها در اختیار داره. class loader شی باینری متناظر هر کلاس رو تولید میکنه و اونها رو بصورت جداگانه و با اطلاعات زیر به Runtime Data Area میده و اون هم توی method area ذخیره میکنه.
به ازای هر برنامه که اجرا میشه یک نمونه از ماشین مجازی جاوا JVM داخل رم سیستم بارگذاری میشه و با استفاده از Class Loader Subsystem کلاس های مورد نظر رو وارد رم میکنه و بهش میگن dynamic class loading که کلاسها رو load و link و initialize میکنه. البته این کار رو فقط یک بار در زمان اجرا انجام میده.
با شی Thread میتونیم یک فضای جدای پردازشی ایجاد کنیم. برای این کار باید یک کلاس را از آم مشتق کنیم و تابع run را در آن باز نویسی کنیم و با فراخوانی تابع start آن را اجرا کنیم. همچنین مقادیری که برای کنترل فرایند های درون آن نیاز است را میتوانید از طریق تابع سازنده آن ارسال کنیم.
تو جاوا یکسری modifire خاص دیگه هم داریم !!!
تو جاوا چهارتا سطح دسترسی داریم !!!
final یک کلمه کلیدی هستش و قبل از کلاس، متد و یا متغییر ها قرار میگیره و مانع از توسعه، بازنویسی و تغییر اونها میشه.
finally: یک بلاک برای کد های مهم هستش که همراه با try/cache استفاده میشه و در هر دو صورت اجرا میشه.
finalize: یک متد هستش که gc قبل از اینکه یک شی رو دور بریزه اون رو صدا میکنه.
final:
static:
A a = new A();
A.B b = a.new B();