JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #60. วิธีการทำงานของการรวบรวมขยะใน Java (JVM) ...

คอฟฟี่เบรค #60. วิธีการทำงานของการรวบรวมขยะใน Java (JVM) 15 คำถามสำคัญเกี่ยวกับ Spring ในการสัมภาษณ์ทางเทคนิค

เผยแพร่ในกลุ่ม

การรวบรวมขยะทำงานอย่างไรใน Java (JVM)

ที่มา: DZone

กระบวนการรวบรวมขยะใน Java

การรวบรวมขยะ Java จะจัดสรรและเพิ่มหน่วยความจำโดยอัตโนมัติ ดังนั้นนักพัฒนาจึงไม่จำเป็นต้องเขียนโปรแกรมแยกต่างหากเพื่อจัดการหน่วยความจำ ซึ่งเป็นหนึ่งในประโยชน์หลักของการเขียนโปรแกรมใน Java ทุกครั้งที่โปรแกรม Java ทำงานบน JVM อ็อบเจ็กต์จะถูกสร้างขึ้นบนฮีปและแสดงถึงส่วนหนึ่งของหน่วยความจำที่จัดสรรให้กับโปรแกรม เมื่อเวลาผ่านไป บางรายการก็ไม่จำเป็นอีกต่อไป ตัวรวบรวมขยะค้นหาวัตถุที่ไม่ได้ใช้เหล่านี้และลบออกเพื่อเพิ่มหน่วยความจำ คอฟฟี่เบรค #61.  วิธีการทำงานของการรวบรวมขยะใน Java (JVM)  คำถามสำคัญ 15 ข้อเกี่ยวกับ Spring ในการสัมภาษณ์ทางเทคนิค - 1หลังจากประเมินฮีปหน่วยความจำแล้ว ตัวรวบรวมขยะจะกำหนดว่าอ็อบเจ็กต์ใดมีการใช้งานและอันใดที่ไม่ได้ใช้ และลบอ็อบเจ็กต์ที่ไม่ได้ใช้ออก วัตถุที่ใช้หรืออ้างอิงหมายความว่าบางส่วนของโปรแกรมของคุณยังคงรักษาตัวชี้ไปยังวัตถุนั้น ถ้าวัตถุไม่ได้ใช้งานอีกต่อไปหรือไม่มีการอ้างถึงอีกต่อไป ส่วนหนึ่งส่วนใดของโปรแกรมจะไม่อ้างอิงวัตถุนั้นอีกต่อไป ดังนั้น หน่วยความจำที่ใช้โดยวัตถุที่ไม่มีการอ้างอิงสามารถถูกปล่อยโดยการดำเนินการรวบรวมขยะ คอฟฟี่เบรค #61.  วิธีการทำงานของการรวบรวมขยะใน Java (JVM)  คำถามสำคัญ 15 ข้อเกี่ยวกับ Spring ในการสัมภาษณ์ทางเทคนิค - 2การเพิ่มหน่วยความจำสามารถอธิบายได้ด้วยกระบวนการหลักสามกระบวนการ:
  1. การทำเครื่องหมาย
  2. การกำจัดตามปกติ
  3. การกำจัดด้วยการบดอัด
การทำเครื่องหมายเป็นกระบวนการในการระบุส่วนของหน่วยความจำที่ตัวรวบรวมขยะใช้และไม่ได้ใช้ การติดฉลากมักเป็นขั้นตอนแรก การลบแบบปกติคือกระบวนการลบอ็อบเจ็กต์ที่ไม่ได้อ้างอิง โดยปล่อยให้อ็อบเจ็กต์และพอยน์เตอร์ที่อ้างอิงอยู่ในพื้นที่ว่าง การลบการกระชับ - นอกเหนือจากการลบอ็อบเจ็กต์ที่ไม่ได้อ้างอิงแล้ว ยังกระชับอ็อบเจ็กต์อ้างอิงที่เหลือ โดยย้ายอ็อบเจ็กต์เข้าด้วยกันเพื่อทำให้การจัดสรรหน่วยความจำใหม่ง่ายขึ้นและเร็วขึ้นมาก

หน่วยความจำฮีป JVM

คอฟฟี่เบรค #61.  วิธีการทำงานของการรวบรวมขยะใน Java (JVM)  15 คำถามสำคัญเกี่ยวกับ Spring ในการสัมภาษณ์ทางเทคนิค - 3

คนรุ่นใหม่

วัตถุที่สร้างขึ้นใหม่เริ่มต้นใน Young Generation มันถูกเรียกว่าเรือนเพาะชำเพราะมีวัตถุใหม่ๆ เริ่มอาศัยอยู่ที่นี่ Young Generation แบ่งออกเป็น Eden Space ซึ่งวัตถุใหม่ทั้งหมดเริ่มต้น และ Survivor Space สองแห่ง ซึ่งวัตถุต่างๆ จะถูกย้ายออกจาก Eden หลังจากรอดชีวิตในรอบการเก็บขยะครั้งเดียว ทำให้เกิดการรวบรวมขยะซ้ำเมื่อคนเก็บขยะคนรุ่นใหม่ถูกรวบรวม Eden Space วัตถุใหม่ทั้งหมดถูกสร้างขึ้นครั้งแรกใน Eden Space การรวบรวมขยะรองจะเริ่มทำงานเมื่อถึงเกณฑ์ที่กำหนดโดย JVM วัตถุดังกล่าวจะถูกย้ายจาก Eden Space ไปยังพื้นที่บันทึกแรก ('Eden' และ 'จาก' -> 'ถึง') วัตถุที่ไม่ได้อ้างอิงจะถูกลบออกเมื่อเคลียร์ Eden Space ผู้รอดชีวิต 0 (S0) และผู้รอดชีวิต 1 (S1) ฟิลด์ผู้รอดชีวิตทั้งสอง (จากและถึง) เริ่มว่างเปล่า เมื่อการรวบรวมขยะเกิดขึ้นอีกครั้ง วัตถุที่อ้างอิงทั้งหมดจะถูกย้ายไปยังพื้นที่ที่เหลือ เมื่อการเก็บขยะเสร็จสิ้น สถานที่ (ชื่อ) ของผู้รอดชีวิต "จาก" และ "ถึง" จะถูกสลับกัน หากระหว่างการรวบรวมขยะก่อนหน้านี้ S1 อยู่ในบทบาท "ถึง" ตอนนี้ S1 เต็มและกลายเป็น "จาก" ดังนั้น หาก S0 ว่างเปล่า มันจะกลายเป็น "ถึง"

คนรุ่นเก่า

หลังจากการรวบรวมขยะเล็กน้อย เมื่อวัตถุที่ล้าสมัยถึงเกณฑ์อายุที่กำหนด (เกณฑ์เริ่มต้นสำหรับ JVM สมัยใหม่ถูกตั้งค่าไว้ที่ 15 รอบการรวบรวมขยะ) วัตถุเหล่านั้นพร้อมกับวัตถุที่มีอายุยืนยาวจะย้ายจากคนรุ่นใหม่ไปสู่รุ่นเก่า ในขณะที่คนเก็บขยะรายย่อยยังคงเกิดขึ้น วัตถุต่างๆ ยังคงเคลื่อนเข้าสู่พื้นที่รุ่นเก่า มันจะเริ่มเต็มและการรวบรวมขยะหลักก็จะเกิดขึ้น การรวบรวมขยะขั้นพื้นฐานเกิดขึ้นเมื่อวัตถุถูกรวบรวมโดยตัวรวบรวมขยะรุ่นเก่า คอฟฟี่เบรค #61.  วิธีการทำงานของการรวบรวมขยะใน Java (JVM)  คำถามสำคัญ 15 ข้อเกี่ยวกับ Spring ในการสัมภาษณ์ทางเทคนิค - 4

รุ่นถาวร

ข้อมูลเมตา เช่น คลาสและวิธีการต่างๆ จะถูกจัดเก็บไว้ในรุ่นถาวร คลาสที่ไม่ได้ใช้อีกต่อไปสามารถลบออกได้โดยตัวรวบรวมขยะ ในระหว่างการรวบรวมขยะอย่างเต็มรูปแบบ จะมีการรวบรวมสิ่งของที่ไม่ได้ใช้จากทุกรุ่นคอฟฟี่เบรค #61.  วิธีการทำงานของการรวบรวมขยะใน Java (JVM)  15 คำถามสำคัญเกี่ยวกับ Spring ในการสัมภาษณ์ทางเทคนิค - 5

ประเภทของการเก็บขยะ

คอลเลกชันขยะที่ทำความสะอาดส่วนต่างๆ ภายในฮีปมักเรียกว่าคอลเลกชันขยะหลัก และขยะทั้งหมด แต่เนื่องจากคำว่า Minor, Major และ Full ถูกใช้กันอย่างแพร่หลายโดยไม่มีคำจำกัดความที่เหมาะสม เราจะมาดูคำอธิบายของการรวบรวมขยะประเภทนี้ทั้งหมด

การเก็บขยะไมเนอร์

การรวบรวมขยะจากพื้นที่คนรุ่นใหม่ เรียกว่า Minor Garbage Collection บิลด์ประเภทนี้จะถูกทริกเกอร์เสมอเมื่อ JVM ไม่สามารถจัดสรรพื้นที่สำหรับอ็อบเจ็กต์ใหม่ได้ นั่นคือเมื่อ Eden Space เต็ม ดังนั้นยิ่งอัตราการคัดเลือกสูงเท่าไร Minor Garbage Collection ก็จะยิ่งเกิดขึ้นบ่อยขึ้นเท่านั้น

การเก็บขยะครั้งใหญ่

Major Garbage Collection ทำความสะอาด Tenured (พื้นที่เก่า) เนื่องจากคนรุ่นเก่ามีขนาดใหญ่กว่า การชุมนุมจึงเกิดขึ้นน้อยกว่าคนรุ่นใหม่ เมื่อวัตถุต่างๆ หายไปจากยุคเก่า เราก็จะเรียกว่า "การสะสมขยะครั้งใหญ่" เกิดขึ้น นักสะสมรุ่นเก่าจะพยายามคาดเดาว่าเมื่อใดที่เขาต้องเริ่มสะสมเพื่อหลีกเลี่ยงความล้มเหลวในการเลื่อนตำแหน่งจากคนรุ่นใหม่ นักสะสมจะตรวจสอบเกณฑ์การเติมของรุ่นเก่า และเริ่มรวบรวมเมื่อเกินเกณฑ์นั้น หากเกณฑ์นี้ไม่เพียงพอที่จะเป็นไปตามข้อกำหนดโปรโมชัน "Full Garbage Collection" จะเปิดตัว

การรวบรวมขยะเต็มรูปแบบ

Full Garbage Collection ทำความสะอาดทั้งกลุ่ม ทั้งพื้นที่เด็กและผู้ใหญ่ หลายคนสับสนระหว่าง Major (รุ่น OLD เท่านั้น) กับ Full GC (Young + OLD (Heap)) Full Garbage Collection รวมถึงการส่งเสริมสิ่งมีชีวิตทุกชนิดตั้งแต่รุ่นเยาว์ไปจนถึงรุ่นเก๋าหลังจากประกอบและอัดแน่นรุ่นเก๋าแล้ว การเก็บขยะอย่างเต็มรูปแบบจะเป็นจุดหยุดสำหรับ Stop-the-World ช่วยให้มั่นใจได้ว่าอ็อบเจ็กต์ใหม่ไม่ได้รับการจัดสรร และอ็อบเจ็กต์นั้นจะไม่สามารถเข้าถึงได้ในขณะที่ตัวรวบรวมกำลังทำงาน

15 คำถามสำคัญเกี่ยวกับ Spring ในการสัมภาษณ์ทางเทคนิค

ที่มา: Dev.to Spring Framework เป็นเฟรมเวิร์กสากลสำหรับแพลตฟอร์ม Java ฟังก์ชันหลักสามารถใช้งานได้กับแอปพลิเคชัน Java ใดก็ได้ และมีส่วนขยายสำหรับการสร้างแอปพลิเคชันเว็บที่ใช้ Java EE นี่คือรายการคำถามและคำตอบในการสัมภาษณ์ที่เกี่ยวข้องกับ Spring Coding เราหวังว่าสิ่งเหล่านี้จะช่วยคุณเตรียมความพร้อมสำหรับการสัมภาษณ์ทางเทคนิคในปี 2021คอฟฟี่เบรค #61.  วิธีการทำงานของการรวบรวมขยะใน Java (JVM)  คำถามสำคัญ 15 ข้อเกี่ยวกับ Spring ในการสัมภาษณ์ทางเทคนิค - 6

1. ฤดูใบไม้ผลิคืออะไร?

คำตอบ: Springเป็นเฟรมเวิร์กโอเพ่นซอร์สสำหรับการพัฒนาแอปพลิเคชัน Java คุณสมบัติหลักของ Spring Framework สามารถใช้ในการพัฒนาแอปพลิเคชัน Java ใดก็ได้ และยังมีส่วนขยายเพื่อสร้างแอปพลิเคชันเว็บบนแพลตฟอร์ม Java EE อีกด้วย Spring Framework มีเป้าหมายเพื่อให้ J2EE ใช้งานได้ง่ายขึ้นในการพัฒนาและปรับปรุงแนวทางการเขียนโปรแกรมโดยการรวมโมเดลที่ใช้ POJO (Plain Old Java Object) เข้าด้วยกัน

2. ขอบเขตเริ่มต้นของ bean ในกรอบงาน Spring คืออะไร?

ตอบ: ขอบเขตเริ่มต้นของ bean คือSingleton (รูปแบบการออกแบบ)

3. การเดินสาย Bean คืออะไร?

คำตอบ: การเดินสาย Beanคือการสร้างการเชื่อมโยงระหว่างส่วนประกอบของแอปพลิเคชัน (ถั่ว) ในคอนเทนเนอร์ของ Spring

4. Spring Security คืออะไร

คำตอบ: Spring Security เป็นโมดูลแยกต่างหากของ Spring Framework ที่มุ่งเน้นไปที่การจัดหาวิธีการตรวจสอบสิทธิ์และการอนุญาตแก่แอปพลิเคชัน Java นอกจากนี้ยังแก้ไขช่องโหว่ด้านความปลอดภัยที่พบบ่อยที่สุด เช่น การโจมตี CSRF หากต้องการใช้ Spring Security ในเว็บแอปพลิเคชัน คุณสามารถเริ่มต้นด้วยคำอธิบายประกอบแบบง่ายๆ: @EnableWebSecurity

5. อะไรคือสิ่งที่อยู่ในคำจำกัดความของ bean?

คำตอบ: คำนิยาม bean มีข้อมูลที่เรียกว่าข้อมูลเมตาของการกำหนดค่าที่คอนเทนเนอร์จำเป็นต้องทราบดังต่อไปนี้:
  • วิธีสร้างถั่ว
  • รายละเอียดวงจรชีวิตของถั่ว
  • การพึ่งพาถั่ว

6. Spring Boot คืออะไร?

คำตอบ: Spring Boot เป็นโปรเจ็กต์ที่ให้ชุดเฟรมเวิร์กที่กำหนดค่าไว้ล่วงหน้าเพื่อลดการกำหนดค่าสำเร็จรูป เพื่อให้คุณสามารถเรียกใช้แอปพลิเคชัน Spring และรันโดยใช้โค้ดน้อยที่สุด

7. DispatcherServlet คืออะไร และใช้ทำอะไร?

คำตอบ: DispatcherServlet คือการนำรูปแบบการออกแบบ Front Controller ไปใช้ ซึ่งจัดการคำขอเว็บขาเข้าทั้งหมดไปยังแอปพลิเคชัน Spring MVC รูปแบบ Front Controller (รูปแบบการออกแบบแอปพลิเคชันระดับองค์กร) เป็นรูปแบบทั่วไปในแอปพลิเคชันเว็บที่มีหน้าที่รับคำขอทั้งหมดและกำหนดเส้นทางไปยังส่วนประกอบต่างๆ ของแอปพลิเคชันเพื่อการประมวลผลจริง ใน Spring MVC DispatcherServlet ใช้เพื่อค้นหาคอนโทรลเลอร์ที่ถูกต้องเพื่อจัดการคำขอ ซึ่งทำได้โดยใช้การแมปตัวจัดการ: ตัวอย่างเช่น คำอธิบายประกอบ @RequestMapping

8. spring-mvc.jar จำเป็นบน classpath หรือเป็นส่วนหนึ่งของ spring-core หรือไม่

คำตอบ: Spring-mvc.jar เป็นส่วนหนึ่งของ spring-core ซึ่งหมายความว่าหากคุณต้องการใช้เฟรมเวิร์ก Spring MVC ในโปรเจ็กต์ Java ของคุณ คุณต้องรวม spring-mvc.jar ไว้ใน classpath ของแอปพลิเคชันของคุณ ในเว็บแอปพลิเคชัน Java โดยปกติแล้ว spring-mvc.jar จะอยู่ในโฟลเดอร์ /WEB-INF/lib

9. การใช้ Spring มีประโยชน์อย่างไร?

คำตอบ: ด้านล่างนี้คือรายการข้อดีบางประการของการใช้ Spring Framework:
  • น้ำหนักเบา – สปริงมีน้ำหนักเบาเมื่อเทียบกับขนาดและความโปร่งใส Spring Framework เวอร์ชันพื้นฐานมีขนาดประมาณ 2 MB
  • การผกผันของการควบคุม (IOC) - การมีเพศสัมพันธ์แบบหลวมสามารถทำได้ในสปริงโดยใช้เทคนิคการกลับด้านของการควบคุม ออบเจ็กต์จัดเตรียมการขึ้นต่อกันแทนที่จะสร้างหรือค้นหาอ็อบเจ็กต์ที่ต้องพึ่งพา
  • เชิงลักษณะ - Spring รองรับการเขียนโปรแกรมเชิงลักษณะและรับรองการพัฒนาที่สอดคล้องกันโดยการแยกตรรกะทางธุรกิจของแอปพลิเคชันออกจากบริการของระบบ
  • คอนเทนเนอร์ - Spring Container สร้างออบเจ็กต์ เชื่อมโยงเข้าด้วยกัน กำหนดค่า และจัดการตั้งแต่การสร้างไปจนถึงการกำจัด
  • MVC Framework - Spring web framework เป็นเฟรมเวิร์กเว็บ MVC ที่ออกแบบมาอย่างดี ซึ่งเป็นทางเลือกแทนเฟรมเวิร์กเว็บ เช่น Struts หรือเฟรมเวิร์กเว็บอื่นๆ ที่ได้รับการออกแบบมากเกินไปหรือได้รับความนิยมน้อยกว่า
  • การจัดการธุรกรรม - Spring มีอินเทอร์เฟซการจัดการธุรกรรมที่สอดคล้องกันซึ่งสามารถปรับขนาดตามธุรกรรมท้องถิ่น (เช่น การใช้ฐานข้อมูลเดียว) หรือธุรกรรมทั่วโลก (เช่น การใช้ JTA)
  • การจัดการข้อยกเว้น - Spring มี API ที่สะดวกสบายสำหรับการแปลงข้อยกเว้นเฉพาะเทคโนโลยี (เช่น JDBC, Hibernate หรือ JDO ที่ส่งออกมา) ให้เป็นข้อยกเว้นที่สอดคล้องกันและไม่มีการตรวจสอบ

10. ถั่วฤดูใบไม้ผลิคืออะไร?

ตอบ Spring bean คือ instance ของอ็อบเจ็กต์ที่ได้รับการจัดการโดย Spring Container สิ่งเหล่านี้ถูกสร้างขึ้นและเชื่อมต่อกันด้วยกรอบงาน และวางไว้ใน "ถุงวัตถุ" (คอนเทนเนอร์) ซึ่งคุณสามารถดึงออกมาได้ในภายหลัง การเดินสายไฟเป็นสิ่งที่ถือเป็นการฉีดแบบพึ่งพา ซึ่งหมายความว่าคุณสามารถพูดง่ายๆ ว่า "ฉันต้องการสิ่งนี้" และกรอบการทำงานจะเป็นไปตามกฎเกณฑ์บางประการเพื่อให้ได้วัตถุนั้น

11. วัตถุประสงค์ของโมดูล Core Container คืออะไร?

ตอบ: คอนเทนเนอร์เคอร์เนลมีฟังก์ชันการทำงานหลักของ Spring Framework ส่วนประกอบหลักของคอนเทนเนอร์หลักคือ BeanFactory ซึ่งเป็นการนำรูปแบบ Factory ไปใช้ BeanFactory ใช้การควบคุมการผกผันเพื่อแยกการกำหนดค่าและการอ้างอิงข้อกำหนดแอปพลิเคชันออกจากรหัสแอปพลิเคชันจริง

12. บริบทของแอปพลิเคชันคืออะไร?

คำตอบ: เมื่อมองแวบแรก บริบทของแอปพลิเคชันจะเหมือนกับโรงงานถั่ว คำจำกัดความของ Load bean ทั้งสองแบบ มัดถั่วเข้าด้วยกัน และแจกจ่ายตามคำขอ แต่ยังให้:
  • เครื่องมือสำหรับแก้ไขข้อความ รวมถึงรองรับการทำให้เป็นสากล
  • วิธีทั่วไปในการโหลดทรัพยากรไฟล์
  • กิจกรรมสำหรับ bean ที่ลงทะเบียนเป็นผู้ฟัง

13. จะรวม Java Server Faces (JSF) เข้ากับ Spring ได้อย่างไร

คำตอบ: JSF และ Spring มีฟีเจอร์บางอย่างที่เหมือนกัน โดยเฉพาะอย่างยิ่งในส่วนของบริการ Inversion of Control โดยการประกาศ bean ที่ได้รับการจัดการ JSF ในไฟล์คอนฟิกูเรชัน faces-config.xml คุณอนุญาตให้ FacesServlet สร้างอินสแตนซ์ bean นั้นเมื่อเริ่มต้นระบบ เพจ JSF ของคุณมีสิทธิ์เข้าถึง bean เหล่านี้และคุณสมบัติทั้งหมด JSF และ Spring สามารถรวมเข้าด้วยกันได้สองวิธี: DelegatingVariableResolver : Spring มาพร้อมกับตัวแก้ไขตัวแปร JSF ที่ให้คุณใช้ JSF และ Spring ร่วมกันได้ DelegatingVariableResolver ขั้นแรกจะมอบหมายการค้นหาค่าให้กับล่ามเริ่มต้นของการนำ JSF ไปใช้และจากนั้นไปที่ "บริบททางธุรกิจ" ของ Spring WebApplicationContext ทำให้ง่ายต่อการฉีดการขึ้นต่อกันลงใน bean ที่จัดการโดย JSF FacesContextUtils : VariableResolver แบบกำหนดเองทำงานได้ดีเมื่อแมปคุณสมบัติกับ bean ใน faces-config.xml แต่ถ้าคุณต้องการจับ bean คลาส FacesContextUtils จะทำให้เป็นเรื่องง่าย คล้ายกับ WebApplicationContextUtils ยกเว้นว่าจะยอมรับพารามิเตอร์ FacesContext แทนที่จะเป็นพารามิเตอร์ ServletContext
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext (FacesContext.getCurrentInstance ());

14. เฟรมเวิร์ก Spring MVC คืออะไร

ตอบ: เฟรมเวิร์ก Spring Web MVCมอบสถาปัตยกรรม model-view-controller และส่วนประกอบที่สร้างไว้ล่วงหน้าที่สามารถใช้เพื่อพัฒนาเว็บแอปพลิเคชันที่ยืดหยุ่นและเชื่อมโยงอย่างหลวมๆ รูปแบบ MVC ส่งผลให้เกิดการแยกแง่มุมต่างๆ ของแอปพลิเคชัน (ตรรกะอินพุต ตรรกะทางธุรกิจ และตรรกะ UI) ในขณะที่อนุญาตให้เชื่อมต่ออย่างหลวมๆ ระหว่างองค์ประกอบเหล่านี้

15. การจัดการเหตุการณ์ใน Spring ทำงานอย่างไร?

คำตอบ: การประมวลผลในApplicationContextมีให้ผ่าน คลาส ApplicationEventและอินเทอร์เฟซApplicationListener นั่นคือหาก bean ใช้ApplicationListenerทุกครั้งที่ ApplicationEventได้รับการเผยแพร่ไปยังApplicationContext bean นั้นจะถูกลงทะเบียน ขอขอบคุณที่อ่านและขอให้โชคดีกับการสัมภาษณ์ทางเทคนิคของคุณ!
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION