JavaRush /وبلاگ جاوا /Random-FA /قهوه استراحت شماره 60. نحوه کار جمع آوری زباله در جاوا (J...

قهوه استراحت شماره 60. نحوه کار جمع آوری زباله در جاوا (JVM). 15 سوال مهم در مورد بهار در یک مصاحبه فنی

در گروه منتشر شد

نحوه کار جمع آوری زباله در جاوا (JVM)

منبع: DZone

فرآیند جمع آوری زباله در جاوا

جمع آوری زباله جاوا به طور خودکار حافظه را تخصیص و آزاد می کند، بنابراین برنامه نویسان مجبور نیستند برنامه جداگانه ای برای مدیریت حافظه بنویسند که یکی از مزایای اصلی برنامه نویسی در جاوا است. هر بار که یک برنامه جاوا روی JVM اجرا می شود، اشیاء روی پشته ایجاد می شوند و بخشی از حافظه اختصاص داده شده به برنامه را نشان می دهند. با گذشت زمان، برخی از اقلام دیگر مورد نیاز نخواهند بود. زباله جمع کن این اشیاء استفاده نشده را پیدا می کند و آنها را برای آزاد کردن حافظه حذف می کند. قهوه استراحت شماره 61.  نحوه کار جمع آوری زباله در جاوا (JVM).  15 سوال مهم در مورد بهار در یک مصاحبه فنی - 1زباله جمع کن، پس از ارزیابی انبوه حافظه، تعیین می کند که کدام اشیاء استفاده می شود و کدام نیست و اشیاء استفاده نشده را حذف می کند. یک شیء استفاده شده یا ارجاع شده به این معنی است که بخشی از برنامه شما همچنان یک اشاره گر به آن شیء را حفظ می کند. اگر یک شی دیگر مورد استفاده قرار نگیرد یا دیگر به آن ارجاع داده نشود، دیگر توسط هیچ بخشی از برنامه به آن ارجاع داده نخواهد شد. بنابراین، حافظه ای که توسط یک شی غیر مرجع استفاده می شود، می تواند با انجام جمع آوری زباله آزاد شود. قهوه استراحت شماره 61.  نحوه کار جمع آوری زباله در جاوا (JVM).  15 سوال مهم در مورد بهار در مصاحبه فنی - 2آزادسازی حافظه را می توان با سه فرآیند اصلی توصیف کرد:
  1. علامت گذاری.
  2. حذف عادی
  3. حذف با فشرده سازی.
علامت گذاری فرآیند شناسایی بخش هایی از حافظه است که توسط زباله جمع کن استفاده می شود و استفاده نمی شود. برچسب زدن معمولا اولین قدم است. حذف معمولی فرآیند حذف اشیایی است که به آنها ارجاع داده نمی شود و اشیا و اشاره گرهای ارجاع شده در فضای آزاد باقی می مانند. حذف فشرده - علاوه بر حذف اشیاء ارجاع نشده، اشیاء ارجاع شده باقیمانده را فشرده می کند و اشیاء را با هم حرکت می دهد تا تخصیص حافظه جدید بسیار آسان تر و سریعتر شود.

JVM Heap Memory

قهوه استراحت شماره 61.  نحوه کار جمع آوری زباله در جاوا (JVM).  15 سوال مهم در مورد بهار در یک مصاحبه فنی - 3

نسل جوان

اشیاء جدید ایجاد شده در نسل جوان شروع می شوند. به آن مهد کودک نیز می گویند زیرا اشیاء جدید در اینجا شروع به زندگی می کنند. نسل جوان به فضای عدن، جایی که تمام اشیاء جدید شروع می شود، و دو فضای بازمانده، که در آن اشیا پس از زنده ماندن در یک چرخه جمع آوری زباله، از عدن منتقل می شوند، تقسیم می شود. هنگامی که اشیاء توسط زباله جمع کن نسل جوان جمع آوری می شوند، باعث جمع آوری مجدد زباله می شوند. Eden Space تمام اشیاء جدید ابتدا در Eden Space ایجاد می شوند. جمع آوری زباله های جزئی زمانی که به آستانه تعیین شده توسط JVM برسد، شلیک می شود. اشیاء ذکر شده از Eden Space به اولین فضای ذخیره ('Eden' and 'from' -> 'to') منتقل می شوند. وقتی فضای Eden پاک شود، اشیاء ارجاع نشده حذف می شوند. Survivor 0 (S0) و Survivor 1 (S1) هر دو قسمت Survivor (از و به) خالی شروع می شوند. هنگامی که جمع آوری زباله دوباره اتفاق می افتد، تمام اشیاء ارجاع شده به فضای باقی مانده منتقل می شوند. وقتی جمع‌آوری زباله به پایان می‌رسد، مکان‌ها (نام) بازماندگان «از» و «به» با هم عوض می‌شوند. اگر در زمان جمع‌آوری زباله قبلی S1 در نقش "به" بود، اکنون S1 پر است و به "از" تبدیل می‌شود. بر این اساس، اگر S0 خالی باشد، به "to" تبدیل می شود.

نسل قدیم

پس از جمع آوری زباله های جزئی، زمانی که اشیاء منسوخ به آستانه سنی خاصی می رسند (به طور پیش فرض، آستانه JVM های مدرن روی 15 چرخه جمع آوری زباله تنظیم شده است)، آنها به همراه اشیاء با عمر طولانی از نسل جوان به نسل قدیمی منتقل می شوند. همانطور که زباله جمع کن های کوچک همچنان به وجود می آیند، اشیا همچنان به سمت فضای نسل قدیم حرکت می کنند، شروع به پر شدن می کند و جمع آوری زباله های بزرگ اتفاق می افتد. جمع‌آوری اولیه زباله زمانی اتفاق می‌افتد که اشیاء توسط زباله‌گیر نسل قدیم جمع‌آوری شوند. قهوه استراحت شماره 61.  نحوه کار جمع آوری زباله در جاوا (JVM).  15 سوال مهم در مورد بهار در مصاحبه فنی - 4

نسل دائمی

ابرداده ها مانند کلاس ها و متدها در Permanent Generation ذخیره می شوند. طبقاتی که دیگر استفاده نمی شوند می توانند توسط زباله جمع کن از آن حذف شوند. در طول یک جمع آوری کامل زباله، اشیاء استفاده نشده از همه نسل ها جمع آوری می شوند.قهوه استراحت شماره 61.  نحوه کار جمع آوری زباله در جاوا (JVM).  15 سوال مهم در مورد بهار در مصاحبه فنی - 5

انواع زباله جمع آوری

مجموعه‌های زباله‌ای که قسمت‌های مختلف داخل توده را تمیز می‌کنند، معمولاً مجموعه‌های زباله کوچک، بزرگ و کامل نامیده می‌شوند. اما از آنجایی که عبارات Minor، Major و Full به طور گسترده بدون تعریف مناسب مورد استفاده قرار می گیرند، به توضیح همه این نوع زباله گردی می پردازیم.

جمع آوری زباله های جزئی

به جمع آوری زباله های فضای نسل جوان، زباله های جزئی می گویند. این نوع ساخت همیشه زمانی فعال می شود که JVM نتواند فضا را برای یک شی جدید اختصاص دهد، یعنی زمانی که Eden Space پر است. بنابراین، هر چه میزان انتخاب بیشتر باشد، جمع آوری زباله جزئی بیشتر اتفاق می افتد.

جمع آوری عمده زباله

Major Garbage Collection Tenured (فضای قدیمی) را تمیز می کند. از آنجایی که نسل قدیمی بزرگتر است، مونتاژ کمتر از نسل جوان اتفاق می افتد. هنگامی که اشیاء از نسل قدیمی ناپدید می شوند، می گوییم که یک "جمع آوری بزرگ زباله" رخ داده است. کلکسیونر نسل قدیم سعی می کند پیش بینی کند که چه زمانی باید جمع آوری را شروع کند تا از شکست های تبلیغاتی نسل جوان جلوگیری کند. کلکسیونرها آستانه پر شدن نسل قدیم را کنترل می کنند و زمانی که از آستانه فراتر رفت شروع به جمع آوری می کنند. اگر این آستانه برای برآورده کردن الزامات تبلیغات کافی نباشد، "جمع آوری کامل زباله" راه اندازی می شود.

جمع آوری کامل زباله

مجموعه کامل زباله همه فضاهای جوان و قدیمی را تمیز می کند. بسیاری از مردم بین Major (فقط نسل قدیمی) و Full GC (Young + OLD (Heap)) اشتباه گرفته می شوند. مجموعه زباله کامل شامل تبلیغ همه اشیای زنده از نسل جوان تا قدیمی پس از مونتاژ و فشرده سازی نسل قدیم است. یک جمع آوری کامل زباله، توقفی برای Stop-the-World خواهد بود. این تضمین می‌کند که اشیاء جدید تخصیص داده نمی‌شوند و در حین کار جمع‌آور، اشیا از دسترس خارج نمی‌شوند.

15 سوال مهم در مورد بهار در یک مصاحبه فنی

منبع: Dev.to Spring Framework یک چارچوب جهانی برای پلتفرم جاوا است. عملکرد اصلی آن می تواند توسط هر برنامه جاوا استفاده شود و برنامه های افزودنی برای ایجاد برنامه های وب مبتنی بر Java EE وجود دارد. در اینجا لیستی از سوالات و پاسخ های مصاحبه مربوط به کد نویسی بهار آمده است. امیدواریم آنها به شما کمک کنند تا برای مصاحبه فنی خود در سال 2021 آماده شوید.قهوه استراحت شماره 61.  نحوه کار جمع آوری زباله در جاوا (JVM).  15 سوال مهم در مورد بهار در مصاحبه فنی - 6

1. بهار چیست؟

پاسخ: Spring یک چارچوب متن باز برای توسعه برنامه های جاوا است. از ویژگی های اصلی Spring Framework می توان برای توسعه هر برنامه جاوا استفاده کرد و افزونه هایی نیز برای ایجاد برنامه های وب بر اساس پلت فرم Java EE در دسترس هستند. هدف چارچوب Spring این است که استفاده از J2EE را در توسعه و بهبود شیوه های برنامه نویسی با ترکیب یک مدل مبتنی بر POJO (Plain Old Java Object) آسان کند.

2. محدوده پیش فرض یک bean در چارچوب Spring چیست؟

پاسخ: محدوده پیش فرض یک لوبیا Singleton (الگوی طراحی) است.

3. سیم کشی Bean چیست؟

پاسخ: سیم کشی Bean عمل ایجاد ارتباط بین اجزای برنامه (لوبیا) در ظرف اسپرینگ است.

4. Spring Security چیست؟

پاسخ: Spring Security یک ماژول جداگانه از چارچوب Spring است که بر ارائه روش های احراز هویت و مجوز برای برنامه های جاوا تمرکز دارد. همچنین اکثر آسیب پذیری های امنیتی مانند حملات CSRF را برطرف می کند. برای استفاده از Spring Security در برنامه های وب، می توانید با یک حاشیه نویسی ساده شروع کنید: @EnableWebSecurity.

5. چه چیزی در تعریف لوبیا وجود دارد؟

پاسخ: تعریف bean حاوی اطلاعاتی به نام فراداده پیکربندی است که ظرف باید موارد زیر را بداند:
  • نحوه ایجاد یک لوبیا؛
  • جزئیات چرخه عمر لوبیا؛
  • وابستگی های لوبیا

6. بوت بهار چیست؟

پاسخ: Spring Boot پروژه ای است که مجموعه ای از فریمورک های از پیش پیکربندی شده را برای کاهش پیکربندی دیگ بخار ارائه می دهد تا بتوانید یک برنامه Spring را با حداقل کد راه اندازی و اجرا کنید.

7. DispatcherServlet چیست و چه کاربردی دارد؟

پاسخ: DispatcherServlet یک پیاده‌سازی از الگوی طراحی Front Controller است که تمام درخواست‌های وب ورودی به یک برنامه Spring MVC را مدیریت می‌کند. الگوی Front Controller (Enterprise Application Design Design Pattern) یک الگوی رایج در برنامه های کاربردی وب است که وظیفه آن گرفتن کل درخواست و هدایت آن به اجزای مختلف برنامه برای پردازش واقعی است. در Spring MVC DispatcherServlet برای یافتن کنترلر مناسب برای رسیدگی به درخواست استفاده می شود. این کار با استفاده از نگاشت کنترلر انجام می شود: به عنوان مثال، حاشیه نویسی @RequestMapping.

8. آیا Spring-mvc.jar در classpath مورد نیاز است یا بخشی از Spring-core است؟

پاسخ: Spring-mvc.jar بخشی از Spring-core است، به این معنی که اگر می خواهید از چارچوب Spring MVC در پروژه جاوا خود استفاده کنید، باید Spring-mvc.jar را در مسیر کلاس برنامه خود قرار دهید. در یک برنامه وب جاوا، spring-mvc.jar معمولاً در پوشه /WEB-INF/lib قرار می گیرد.

9. مزایای استفاده از اسپرینگ چیست؟

پاسخ: در زیر لیستی از مزایای استفاده از Spring Framework آورده شده است:
  • سبک وزن - فنر از نظر اندازه و شفافیت نسبتاً سبک وزن است. نسخه اصلی Spring Framework حدود 2 مگابایت است.
  • وارونگی کنترل (IOC) - کوپلینگ شل در بهار با استفاده از تکنیک وارونگی کنترل به دست می آید. اشیا به جای ایجاد یا جستجوی اشیاء وابسته، وابستگی های خود را فراهم می کنند.
  • جنبه گرا - Spring از برنامه نویسی جنبه گرا پشتیبانی می کند و با جدا کردن منطق تجاری برنامه از خدمات سیستم، توسعه پایدار را تضمین می کند.
  • کانتینرها - Spring Container اشیاء را ایجاد می کند، آنها را به هم متصل می کند، آنها را پیکربندی می کند و آنها را از ایجاد تا دفع مدیریت می کند.
  • چارچوب MVC - چارچوب وب Spring یک چارچوب وب MVC به خوبی طراحی شده است که جایگزینی برای چارچوب های وب مانند Struts یا سایر چارچوب های وب بیش از حد طراحی شده یا کمتر محبوب است.
  • مدیریت تراکنش - Spring دارای یک رابط مدیریت تراکنش سازگار است که می تواند به تراکنش های محلی (مثلاً با استفاده از یک پایگاه داده واحد) یا تراکنش های جهانی (مثلاً با استفاده از JTA) مقیاس شود.
  • Exception Handling - Spring یک API مناسب برای تبدیل استثناهای خاص فناوری (مانند مواردی که توسط JDBC، Hibernate یا JDO پرتاب می شوند) به استثناهای ثابت و بدون علامت ارائه می دهد.

10. لوبیا بهاره چیست؟

پاسخ: Spring beans نمونه هایی از اشیا هستند که توسط Spring Container مدیریت می شوند. آنها توسط چارچوب ایجاد و متصل می شوند و در یک "کیسه شی" (ظرف) قرار می گیرند که بعداً می توانید آنها را بازیابی کنید. سیم کشی چیزی است که تزریق وابستگی را تشکیل می دهد. این بدان معنی است که شما می توانید به سادگی بگویید "من به این چیز نیاز دارم" و چارچوب قوانین خاصی را برای دریافت آن شی دنبال می کند.

11. هدف از ماژول Core Container چیست؟

پاسخ: محفظه هسته عملکرد اصلی چارچوب Spring را ارائه می دهد. جزء اصلی کانتینر اصلی BeanFactory است که اجرای الگوی Factory است. BeanFactory از کنترل Inversion برای جدا کردن وابستگی های پیکربندی و مشخصات برنامه از کد برنامه واقعی استفاده می کند.

12. زمینه برنامه چیست؟

پاسخ: در نگاه اول زمینه کاربرد همان کارخانه حبوبات است. هر دو تعاریف لوبیا را بارگذاری می‌کنند، دانه‌ها را با هم جمع می‌کنند و در صورت درخواست توزیع می‌کنند. اما همچنین ارائه می دهد:
  • ابزاری برای حل پیام های متنی، از جمله پشتیبانی برای بین المللی سازی.
  • یک روش رایج برای بارگیری منابع فایل.
  • رویدادهای لوبیا که به عنوان شنونده ثبت شده است.

13. چگونه Java Server Faces (JSF) را با Spring یکپارچه کنیم؟

پاسخ: JSF و Spring برخی از ویژگی های یکسانی را دارند، به خصوص در زمینه خدمات Inversion of Control. با اعلام JSF management bean در فایل پیکربندی faces-config.xml، به FacesServlet اجازه می‌دهید تا آن bean را در هنگام راه‌اندازی نمونه‌سازی کند. صفحات JSF شما به این دانه ها و تمام خواص آنها دسترسی دارند. JSF و Spring را می توان به دو روش ادغام کرد: DelegatingVariableResolver : Spring با یک حل کننده متغیر JSF ارائه می شود که به شما امکان می دهد از JSF و Spring با هم استفاده کنید. DelegatingVariableResolver ابتدا جستجوی مقادیر را به مفسر پیش‌فرض پیاده‌سازی زیربنایی JSF و سپس به «زمینه تجاری» Spring WebApplicationContext واگذار می‌کند. این باعث می‌شود که وابستگی‌ها به لوبیاهای مدیریت‌شده JSF آسان شود. FacesContextUtils : یک VariableResolver سفارشی هنگام نگاشت ویژگی های خود به beans در faces-config.xml به خوبی کار می کند. اما اگر نیاز به گرفتن یک لوبیا دارید، کلاس FacesContextUtils کار را آسان می کند. شبیه به WebApplicationContextUtils است با این تفاوت که یک پارامتر FacesContext را به جای پارامتر ServletContext می پذیرد.
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. فریم ورک Spring MVC چیست؟

پاسخ: چارچوب Spring Web MVC یک معماری مدل-نما-کنترلر و اجزای از پیش ساخته شده ای را ارائه می دهد که می تواند برای توسعه برنامه های کاربردی وب انعطاف پذیر و با اتصال آزاد استفاده شود. الگوی MVC منجر به جداسازی جنبه‌های مختلف یک برنامه کاربردی (منطق ورودی، منطق تجاری و منطق UI) می‌شود و در عین حال امکان اتصال آزاد بین این عناصر را فراهم می‌کند.

15. مدیریت رویداد در بهار چگونه کار می کند؟

پاسخ: پردازش در ApplicationContext از طریق کلاس ApplicationEvent و رابط ApplicationListener ارائه می شود . یعنی اگر یک Bean ApplicationListener را پیاده سازی کند ، هر بار که یک ApplicationEvent در ApplicationContext منتشر می شود ، آن bean ثبت می شود. با تشکر از خواندن و موفق باشید در مصاحبه فنی خود را!
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION