JavaRush /จาวาบล็อก /Random-TH /การเรียนรู้ Google | ระดับ 4 | บรรยายครั้งที่ 11
sunshine4545
ระดับ
Минск

การเรียนรู้ Google | ระดับ 4 | บรรยายครั้งที่ 11

เผยแพร่ในกลุ่ม
การเรียนรู้ Google |  ระดับ 4 |  บรรยายที่ 11 - 1

1. ตัวรวบรวมขยะทำงานอย่างไรใน Java

ตัวรวบรวมขยะเป็นกระบวนการที่มีลำดับความสำคัญต่ำที่ทำงานเป็นระยะๆ และเพิ่มหน่วยความจำที่ใช้โดยอ็อบเจ็กต์ที่ไม่จำเป็นอีกต่อไป ตัวรวบรวมขยะทำงานในพื้นหลัง ควบคู่ไปกับโปรแกรม ในเธรดที่แยกจากกัน พื้นฐานสำหรับการรวบรวมขยะไม่ใช่การนับอ้างอิง แต่เป็นการแยกวัตถุออกเป็นสองประเภท - เข้าถึงได้และไม่สามารถเข้าถึงได้ วัตถุจะถือว่าสามารถเข้าถึงได้ (มีชีวิต) หากมีการอ้างอิงโดยวัตถุอื่นที่สามารถเข้าถึงได้ (มีชีวิต) ความสามารถในการเข้าถึงนับจากเธรด เธรดที่รันอยู่จะถือว่าสามารถเข้าถึงได้ (มีอยู่) เสมอ แม้ว่าจะไม่มีใครอ้างอิงถึงก็ตาม อ็อบเจ็กต์ทั้งหมดใน Java จะถูกจัดเก็บไว้ในพื้นที่หน่วยความจำพิเศษที่เรียกว่าฮีป ออบเจ็กต์ทั้งหมดในโปรแกรมสามารถแบ่งออกเป็นสองประเภท - วัตถุที่ค่อนข้างพูด วัตถุที่เรียบง่าย และวัตถุที่ "มีอายุยืนยาว" วัตถุที่มีอายุยืนยาวคือวัตถุที่รอดพ้นจากการสะสมขยะจำนวนมาก ส่วนใหญ่มักจะมีอยู่จนกระทั่งสิ้นสุดโปรแกรม เป็นผลให้ฮีปทั่วไปซึ่งจัดเก็บวัตถุที่สร้างขึ้นทั้งหมดถูกแบ่งออกเป็นหลายส่วน ส่วนแรกมีชื่อที่สวยงาม - เอเดน ("สวนเอเดนในพระคัมภีร์ไบเบิล") วัตถุต่างๆ มาที่นี่หลังจากที่ถูกสร้างขึ้น ในส่วนนี้หน่วยความจำจะถูกจัดสรรให้กับวัตถุใหม่เมื่อเราเขียนใหม่ คุณสามารถสร้างวัตถุได้มากมาย และเมื่อพื้นที่ในบริเวณนี้หมด การรวบรวมขยะครั้งแรกที่ "รวดเร็ว" จะเริ่มต้นขึ้น ต้องบอกว่าตัวรวบรวมขยะฉลาดมากและเลือกอัลกอริธึมการทำงานขึ้นอยู่กับว่ามีอะไรมากกว่านั้นในฮีป - ขยะหรือวัตถุทำงาน หากวัตถุเกือบทั้งหมดเป็นขยะ ตัวรวบรวมจะทำเครื่องหมายวัตถุที่ "ใช้งานจริง" และย้ายไปยังพื้นที่หน่วยความจำอื่น หลังจากนั้นพื้นที่ปัจจุบันจะถูกล้างให้หมด หากมีขยะเพียงเล็กน้อยและส่วนใหญ่เต็มไปด้วยสิ่งมีชีวิต มันจะทำเครื่องหมายขยะ ทำความสะอาด และจัดเรียงสิ่งของที่เหลือ พื้นที่หน่วยความจำที่วัตถุทั้งหมดที่รอดชีวิตจากการรวบรวมขยะอย่างน้อยหนึ่งรายการถูกถ่ายโอนเรียกว่า Survival Space Survival Space ในทางกลับกัน ก็แบ่งออกเป็นรุ่นต่างๆ แต่ละออบเจ็กต์ได้รับการกำหนดรุ่นตามจำนวนคอลเลกชันขยะที่ออบเจ็กต์ได้รับ หากมีอย่างใดอย่างหนึ่ง ก็จะเป็นของ "รุ่นที่ 1" ถ้า 5 - เป็น "รุ่นที่ 5" เมื่อร่วมมือกัน Eden และ Survival Space จะสร้างพื้นที่ที่เรียกว่า Young Generation นอกจาก Young Generation แล้ว ยังมีอีกพื้นที่หน่วยความจำในฮีป - Old Generation (“รุ่นเก่า”) สิ่งเหล่านี้เป็นวัตถุที่มีอายุยืนยาวมากซึ่งรอดพ้นจากการรวบรวมขยะจำนวนมาก จะทำกำไรได้มากกว่าหากจัดเก็บแยกจากที่อื่นทั้งหมด และเฉพาะเมื่อพื้นที่ Old Generation เต็มเท่านั้นคือ แม้ว่าจะมีอ็อบเจ็กต์ที่มีอายุยาวนานจำนวนมากในโปรแกรมจนมีหน่วยความจำไม่เพียงพอ ก็ยังดำเนินการรวบรวมขยะทั้งหมด มันประมวลผลไม่ใช่แค่พื้นที่หน่วยความจำเดียว แต่โดยทั่วไปแล้วอ็อบเจ็กต์ทั้งหมดที่สร้างโดยเครื่อง Java โดยปกติแล้วจะใช้เวลาและทรัพยากรมากกว่ามาก นั่นคือเหตุผลว่าทำไมจึงตัดสินใจเก็บวัตถุที่มีอายุยืนแยกกัน เมื่อพื้นที่ในพื้นที่อื่นหมดจะเรียกว่า “การเก็บขยะอย่างรวดเร็ว” ครอบคลุมพื้นที่เดียวเท่านั้นและด้วยเหตุนี้จึงประหยัดและรวดเร็วยิ่งขึ้น ในตอนท้าย เมื่อแม้แต่พื้นที่สำหรับผู้อยู่อาศัยที่มีอายุยืนยาวก็อุดตันอยู่แล้ว การทำความสะอาดอย่างเต็มรูปแบบก็เข้ามามีบทบาท ดังนั้นผู้ประกอบจึงใช้เครื่องมือที่ "หนัก" ที่สุดเมื่อไม่จำเป็นอีกต่อไปเท่านั้น การเรียนรู้ Google |  ระดับ 4 |  บรรยายที่ 11 - 2

2.คนเก็บขยะมีกี่ประเภท?

Java มีตัวรวบรวมขยะเจ็ดประเภท:
  1. คนเก็บขยะแบบอนุกรม
  2. รถเก็บขยะแบบขนาน
  3. โปรแกรมเก็บขยะ CMS
  4. G1 รถเก็บขยะ
  5. รถเก็บขยะเอปซิลอน
  6. Z คนเก็บขยะ
  7. คนเก็บขยะเชนันโดอาห์

3. “รุ่น” ของวัตถุคืออะไร

วัตถุทั้งหมดใน Survival Space แบ่งออกเป็นรุ่น แต่ละออบเจ็กต์ได้รับการกำหนดรุ่นตามจำนวนคอลเลกชันขยะที่ออบเจ็กต์ได้รับ หากมีอย่างใดอย่างหนึ่ง ก็จะเป็นของ "รุ่นที่ 1" ถ้า 5 - เป็น "รุ่นที่ 5"

4. SoftReference ใช้ทำอะไร?

อ็อบเจ็กต์ที่อ้างอิงโดยซอฟต์อ้างอิงเท่านั้นสามารถถูกรวบรวมขยะได้หากโปรแกรมมีหน่วยความจำไม่เพียงพอ หากโปรแกรมหน่วยความจำไม่เพียงพอ ก่อนที่จะโยน OutOfMemoryException ตัวรวบรวมขยะจะลบอ็อบเจ็กต์ทั้งหมดที่อ้างอิงโดยซอฟต์ลิงก์ และพยายามจัดสรรหน่วยความจำให้กับโปรแกรมอีกครั้ง วัตถุที่ถูกป้องกันไม่ให้ตายโดย SoftReference เท่านั้นที่สามารถอยู่รอดได้จากการรวบรวมขยะจำนวนเท่าใดก็ได้ และมักจะถูกทำลายหากโปรแกรมหน่วยความจำไม่เพียงพอ

5. ตัวอย่างการใช้ SoftReference

SoftReferences ได้รับการออกแบบมาโดยเฉพาะสำหรับการแคช สมมติว่าโปรแกรมไคลเอนต์ร้องขอข้อมูลต่างๆ จากโปรแกรมเซิร์ฟเวอร์บ่อยครั้ง จากนั้นโปรแกรมเซิร์ฟเวอร์สามารถแคชบางส่วนได้โดยใช้ SoftReference สำหรับสิ่งนี้ หากวัตถุที่เก็บไว้ไม่ให้ตายโดยการอ้างอิงแบบซอฟต์ใช้พื้นที่หน่วยความจำส่วนใหญ่ ตัวรวบรวมขยะก็จะลบพวกมันออกไป เท่านี้ก็เรียบร้อย

6. ตัวอย่างการใช้ WeakReference

หากมีเพียงการอ้างอิงที่ไม่ชัดเจนไปยังวัตถุ วัตถุนี้ก็ยังมีชีวิตอยู่ แต่จะถูกทำลายในระหว่างการรวบรวมขยะครั้งถัดไป วัตถุที่ถูกป้องกันไม่ให้ตายโดย WeakReference เพียงอย่างเดียวจะไม่สามารถรอดจากการรวบรวมขยะครั้งต่อไป แต่จนกว่าจะเกิดขึ้น คุณสามารถรับมันได้โดยการเรียกเมธอดget()บน WeakReference แล้วเรียกเมธอดของมันหรือทำอย่างอื่น ตัวอย่างของการใช้ WeakReference คือ WeakHashMap

7. เหตุใดจึงจำเป็นต้องใช้ WeakHashMap

WeakHashMap คือ HashMap ซึ่งมีคีย์ที่มีการอ้างอิงที่ไม่รัดกุม - WeakReference คุณจัดเก็บคู่ของวัตถุไว้ใน WeakHashMap - คีย์และค่า แต่ WeakHashMap ไม่ได้อ้างอิงถึงคีย์โดยตรง แต่ผ่าน WeakReference ดังนั้นเมื่อวัตถุที่ใช้เป็นกุญแจไม่สามารถเข้าถึงได้ วัตถุเหล่านั้นจะถูกทำลายในการรวบรวมขยะครั้งถัดไป ซึ่งหมายความว่าค่าของพวกเขาจะถูกลบออกจาก WeakHashMap โดยอัตโนมัติ WeakHashMap สะดวกมากสำหรับการจัดเก็บข้อมูลเพิ่มเติมสำหรับวัตถุบางอย่าง ประการแรก มันง่ายมากที่จะได้รับหากคุณใช้วัตถุนั้นเป็นกุญแจ ประการที่สอง หากวัตถุถูกทำลาย ทั้งวัตถุและข้อมูลทั้งหมดที่เกี่ยวข้องกับวัตถุนั้นจะหายไปจาก HashMap ตัวอย่างเช่น โปรแกรมมีเธรดที่ตรวจสอบการทำงานของวัตถุงานบางอย่างและเขียนข้อมูลเกี่ยวกับวัตถุเหล่านั้นลงในบันทึก จากนั้นเธรดนี้สามารถจัดเก็บอ็อบเจ็กต์ที่ถูกติดตามใน WeakHashMap ได้ ทันทีที่วัตถุไม่จำเป็นอีกต่อไป ตัวรวบรวมขยะจะลบวัตถุเหล่านั้น และการอ้างถึงวัตถุเหล่านั้นจาก WeakHashMap จะถูกลบโดยอัตโนมัติ

8. คนตัดไม้คืออะไร

วัตถุ Logger ใช้เพื่อบันทึกข้อความสำหรับระบบหรือส่วนประกอบแอปพลิเคชันเฉพาะ บันทึกคือรายการเหตุการณ์ที่เกิดขึ้น ส่วนใหญ่แล้วข้อมูลเกี่ยวกับพารามิเตอร์เมธอดที่ถูกเรียกใช้ ข้อผิดพลาดที่ดักจับทั้งหมด และข้อมูลกลางจำนวนมากถูกเขียนลงในบันทึก กระบวนการบันทึกทั้งหมดประกอบด้วยสามส่วน
  • ส่วนแรกคือการรวบรวมข้อมูล
  • ส่วนที่สองคือการกรองข้อมูลที่รวบรวม
  • ส่วนที่สามคือการบันทึกข้อมูลที่เลือก

9. วิธีการตั้งค่าเครื่องบันทึก

  1. เพิ่มการพึ่งพาให้กับ pom.xml
  2. เพิ่มไฟล์ log4j.properties ให้กับรีซอร์ส
    โดยทั่วไป การตั้งค่าตัวบันทึก log4j จะถูกตั้งค่าในไฟล์ log4j.properties ในไฟล์นี้คุณสามารถระบุภาคผนวกได้หลายรายการ - ออบเจ็กต์ที่จะเขียนข้อมูล
  3. เพิ่มในชั้นเรียนด้วยตรรกะทางprivate static final Logger log = Logger.getLogger(ххх.class);ธุรกิจ
ใช้แล้ว:
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION