‫เราจะกลับมา
‫ในวิดีโอนี้ ฉันอยากจะพูดเกี่ยวกับตัวรวบรวมขยะและวิธีที่ C-sharp ดูแลหน่วยความจำ
‫ดังนั้นการรวบรวมขยะจึงเป็นเครื่องมือที่มีอยู่ในภาษาการเขียนโปรแกรมหลายภาษา
‫และในบางส่วนก็ทำด้วยตนเองและบางส่วนก็ทำโดยอัตโนมัติ
‫และดอทเน็ตเฟรมเวิร์กให้การจัดการหน่วยความจำอัตโนมัติ ซึ่งหมายความว่าคุณไม่จำเป็นต้องใช้ตัวรวบรวมขยะด้วยตนเองเหมือนกับที่คุณทำในภาษาการเขียนโปรแกรมทั้งหมด
‫ดังนั้นภาษาการเขียนโปรแกรมเช่น C หรือ C ++ และอื่น ๆ พวกเขามีการรวบรวมขยะแบบแมนนวลที่คุณต้องเรียกใช้เป็นระยะ
‫ๆ และคุณต้องรู้เมื่อต้องเรียกใช้
‫นั่นคือสิ่งที่ทำโดยอัตโนมัติในร้านค้า C
‫นั่นเป็นเหตุผลที่ไม่ใช่สิ่งที่ใช่ หลายคนใช้บ่อยมาก
‫ดังนั้นเมื่อคุณมีโปรแกรมที่ซับซ้อนและก้าวหน้ามากขึ้น คุณก็จะเริ่มใช้งานมันเป็นระยะๆ
‫แต่จริงๆ แล้ว ไม่ใช่สิ่งที่คุณต้องใช้ตลอดเวลาหรือแม้แต่ต้องใช้เลยในกรณีส่วนใหญ่
‫นั่นเป็นเหตุผลว่าทำไมจึงไม่ใช่หัวข้อสำคัญที่จะพูด
‫ไม่เป็นไร.
‫สมมุติว่าเรามีวัตถุนี้ชื่อเดนนิส และเป็นประเภทมนุษย์
‫ดังนั้นฉันจึงสร้างคลาสที่เรียกว่ามนุษย์และมีคุณสมบัติที่แตกต่างกันหลายอย่างเป็นต้น
‫ในท้ายที่สุด ฉันแค่สร้างวัตถุที่มีลักษณะเป็นมนุษย์ ที่เรียกว่าเดนนิส
‫และด้วยการใช้คำหลักใหม่นี้ ฉันต้องการหน่วยความจำเพราะมันสร้างวัตถุในหน่วยความจำของฉัน
‫ดังนั้น C Sharp จึงจัดสรรหน่วยความจำให้เราและเฟรมเวิร์กจะดูแลการเรียกคืนหน่วยความจำเพื่อใช้ในระบบเมื่อไม่มีการใช้อ็อบเจ็กต์อีกต่อไป
‫ดังนั้นในกรณีนี้ ฉันกำลังสร้างวัตถุนี้ จากนั้นฉันอาจใช้มัน และฉันอาจจะใช้มันซ้ำแล้วซ้ำเล่า
‫แต่เมื่อถึงจุดหนึ่ง ฉันจะไม่ใช้มันอีกต่อไป และฉันอาจจะตัดการอ้างอิงถึงมันด้วยซ้ำ
‫จากนั้น ใช่ ตัวรวบรวมขยะจะทำความสะอาดมันเพราะตอนนี้หน่วยความจำนี้ถูกบล็อกและตัวรวบรวมขยะจะต้องทำความสะอาด
‫จึงต้องทำให้หน่วยความจำนี้พร้อมใช้งานอีกครั้งสำหรับวัตถุอื่นๆ เป็นต้น
‫ทีนี้ลองดูจากมุมมองภาพ
‫ดังนั้นเราจึงมีพูลหน่วยความจำของระบบอยู่ทางด้านซ้ายมือ และโปรแกรมของเราอยู่ทางด้านขวามือ
‫และพูลหน่วยความจำของระบบมีหน่วยความจำจำนวนมาก เราจึงสามารถใช้หน่วยความจำนี้กับโปรแกรมต่างๆ ได้หลายโปรแกรม
‫แต่ตอนนี้ เรามีโปรแกรมของเราที่รันมัน และตอนนี้ในโปรแกรมของเรา เราสร้างอ็อบเจ็กต์
‫ทันใดนั้น เราต้องการพื้นที่ว่างในความทรงจำของเรา
‫ไม่เป็นไร.
‫ดังนั้นจึงมีการอ้างอิงจากโปรแกรมของเราไปยังหน่วยความจำที่จัดเก็บวัตถุของเราไว้
‫ไม่เป็นไร.
‫จึงมีการอ้างอิงโดยตรง และเราสามารถนำกลับมาใช้ใหม่ได้ และเราสามารถเรียกมันจากจุดต่างๆ เป็นต้น
‫ไม่เป็นไร.
‫แล้วเราก็มีอีกอันหนึ่งและอีกอันหนึ่ง
‫ดังนั้นเราจึงมีวัตถุต่างๆ ที่เราสร้างขึ้น
‫และทุกครั้งที่เราสร้างวัตถุใหม่ จะมีหน่วยความจำที่จัดสรรไว้ในพูลหน่วยความจำและมีการอ้างอิงจากโปรแกรมของเราไปยังหน่วยความจำนั้น
‫ดังนั้นข้อมูลอ้างอิงเหล่านี้จึงอยู่ที่นั่น
‫ดังนั้นจึงมีการอ้างอิงจากโปรแกรมของเราไปยังพูลหน่วยความจำ
‫ณ จุดหนึ่ง การอ้างอิงอาจถูกลบ
‫ดังนั้นเราอาจลบการอ้างอิงโดยการตั้งค่าตัวแปร null หรือโดยการตั้งค่าอ็อบเจ็กต์ null จากนั้นการอ้างอิงจะหายไปทันที
‫ตอนนี้ไม่มีการอ้างอิงจากโปรแกรมของเราถึงการจัดสรรหน่วยความจำเพียงเล็กน้อยที่นี่อีกต่อไป
‫ดังนั้นตัวรวบรวมขยะของเราจึงสังเกตเห็นและบอกว่า โอเค ไม่มีข้อมูลอ้างอิง ดังนั้นหน่วยความจำชิ้นเล็กๆ
‫นี้จึงไม่เคยถูกใช้ ดังนั้น เรามาล้างข้อมูลหรือจัดสรรใหม่ หรือปล่อยให้ว่างสำหรับการจัดสรรอื่น
‫และนั่นคือสิ่งที่เกิดขึ้นแล้ว
‫ตอนนี้เรามาดูตัวอย่างกันว่าเมื่อไรที่คนเก็บขยะจะเข้ามา
‫และฉันมีฟังก์ชันที่เรียกว่าฟังก์ชันของฉัน และฉันกำลังสร้างวัตถุที่นี่
‫เรียกอีกอย่างว่าเดนนิส
‫แล้วเดนนิสก็เรียกวิธีการของเขา หรือเราเรียกวิธีการของเขาว่าสอน
‫จากนั้นเรากำหนดอายุของเขาแล้วเราก็เรียกวิธีอื่นว่าแก่ขึ้นเป็นต้น
‫แต่เมื่อถึงจุดหนึ่ง วัตถุ Dennis นี้ในหน่วยความจำก็ไม่จำเป็นอีกต่อไป เนื่องจากการเรียกใช้ฟังก์ชันสิ้นสุดลง
‫ดังนั้นฟังก์ชันจะสิ้นสุดวัตถุ
‫เดนนิสอยู่นอกขอบเขตและไม่มีการอ้างอิงถึงเดนนิสอีกต่อไป เนื่องจากฟังก์ชันของฉันคือฟังก์ชัน และเรามีออบเจกต์นี้ซึ่งอยู่ในฟังก์ชัน
‫ดังนั้นขอบเขตของฟังก์ชันจึงอยู่ภายในฟังก์ชัน
‫ดังนั้น เมื่อการเรียกใช้ฟังก์ชันสิ้นสุดลง จะไม่มีการอ้างถึงโดยตรงอีกต่อไป เนื่องจากเราไม่สามารถอ้างอิงไปยังอ็อบเจ็กต์ที่อยู่ภายในฟังก์ชันจากภายนอกฟังก์ชันนี้ได้
‫ถูกต้อง.
‫ดังนั้นเราจะต้องสร้างฟิลด์สำหรับสิ่งนั้นหรือทำแนวทางอื่นสำหรับสิ่งนี้
‫แต่ในท้ายที่สุด คนเก็บขยะ ที่ทำความสะอาดเดนนิส และจัดสรรหน่วยความจำนี้ใหม่
‫และแนวคิดทั่วไปตรงนี้ก็คือว่า นี่เป็นเพียงตัวอย่างง่ายๆ เพียงหนึ่งตัวอย่าง
‫มีสถานการณ์อื่นๆ มากมายที่คนเก็บขยะจะเริ่มทำงาน แต่นี่คือสิ่งที่เราใช้ไปแล้ว
‫ดังนั้น แนวคิดที่คุณเห็นที่นี่ เราได้เห็นพวกเขาในวิดีโออื่น ๆ หรือการบรรยายของหลักสูตรนี้แล้ว
‫นั่นเป็นเหตุผลที่ฉันเลือกตัวอย่างนี้
‫สิ่งที่คุณต้องรู้เกี่ยวกับการเก็บขยะ?
‫คุณไม่จำเป็นต้องเรียกตัวรวบรวมขยะด้วยตนเอง แต่คุณสามารถดำเนินการด้วยตนเองได้
‫ตัวรวบรวมขยะต้องการพลังในการประมวลผล ดังนั้นมันจึงอยู่ในเธรดที่แยกจากกันและมีน้ำหนักเบามาก
‫แต่ก็ยังต้องการพลังในการประมวลผลอยู่บ้าง
‫เป้าหมายของตัวรวบรวมขยะคือการเพิ่มหน่วยความจำแต่อย่าใช้พลังงานในการประมวลผลมากเกินไป
‫ดังนั้นโดยทั่วไปจะไม่ต้องการพลังในการประมวลผลมากนัก แต่จะไม่มีการเรียกใช้ตลอดเวลา มิฉะนั้นตัวรวบรวมขยะจะไม่ทำงานตลอดเวลาเพื่อเพิ่มพื้นที่หน่วยความจำ
‫มันจะทำงานเมื่อจำเป็นหรือเมื่อเห็นว่าจำเป็น เมื่อเห็นว่าจำเป็น
‫นั่นเป็นส่วนที่ยุ่งยากจริงๆ
‫ไม่จำเป็นต้องเรียกคืนหน่วยความจำทันที
‫อาจใช้เวลาสักครู่สำหรับตัวรวบรวมขยะ แม้ว่าคุณจะเรียกมันด้วยตนเอง ก็ไม่ต้องวิ่งหนีทันที
‫ดังนั้นสิ่งเหล่านี้จึงเป็นเรื่องยุ่งยากบางอย่างเกี่ยวกับคนเก็บขยะ
‫คุณสามารถใช้วิธีการขั้นสุดท้ายเพื่อรันโค้ดก่อนที่ตัวรวบรวมขยะจะปล่อยวัตถุออกจากหน่วยความจำ
‫ซึ่งหมายความว่าหากคุณตัดสินใจที่จะเรียกใช้โค้ดเฉพาะก่อนที่อ็อบเจ็กต์จะถูกล้าง ดังนั้นก่อนที่ตัวรวบรวมขยะจะทำความสะอาด
‫ดังนั้น เมื่อไม่มีการอ้างอิงถึงมันอีกต่อไป ตัวอย่างเช่น คุณสามารถใช้วิธีเลเซอร์ขั้นสุดท้ายภายในคลาสนี้
‫เพื่อนำฟังก์ชันเฉพาะที่คุณต้องการให้ทำงาน
‫บางทีคุณอาจต้องการทำความสะอาดสิ่งต่าง ๆ ด้วยตัวเองก่อนที่ตัวรวบรวมขยะจะเข้ามาและล้างวัตถุของคุณหรือย้ายหน่วยความจำหรือปล่อยมันจากหน่วยความจำไปยังวัตถุนี้
‫ไม่เป็นไร.
‫ตัวรวบรวมขยะทำงานเมื่อใด
‫เมื่อระบบมีหน่วยความจำกายภาพต่ำ เมื่อหน่วยความจำที่จัดสรรเกินเกณฑ์ที่กำหนดไว้
‫เมื่อมีการเรียกตัวรวบรวมขยะหรือรวบรวมวิธีการ แม้ว่าจะเป็นวิธีที่ยุ่งยากมากก็ตาม
‫ดังนั้นนี่คือสิ่งที่เป็น
‫ใช่ เฉพาะเจาะจงมาก พิเศษมาก
‫หากคุณต้องการทราบข้อมูลเพิ่มเติม คุณควรตรวจสอบเอกสารเกี่ยวกับตัวรวบรวมขยะ
‫แต่วิธีการรวบรวมจุดไม่ได้ถูกเรียกในทันทีเสมอไป และไม่ได้ทำความสะอาดทุกอย่างโดยตรง
‫มันเหมือนกับว่าคุณกำลังให้คำแนะนำเกี่ยวกับเครื่องมือ คุณจึงพูดว่า โอเค คนเก็บขยะ
‫โดยส่วนตัวฉันคิดว่านั่นอาจเป็นจุดดีหรือจุดที่ดีในการเก็บขยะ แต่ในบางกรณีอาจไม่ยอมรับหรืออาจทำในภายหลังหรืออะไรทำนองนั้น
‫บางทีมันอาจจะแค่เก็บขยะและตัดสินใจว่ามันไม่จำเป็นหรืออะไรทำนองนั้น
‫ดังนั้นจึงเป็นเรื่องที่ยุ่งยากมาก
‫หากคุณต้องการทราบข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบ
‫แต่ฉันคิดว่านี่เป็นจุดเริ่มต้นที่ดีที่จะทำความเข้าใจว่าคนเก็บขยะทำอะไร
‫และอย่างที่ฉันพูด ในกรณีส่วนใหญ่ คุณไม่จำเป็นต้องใช้มันเพราะทุกวันนี้ เรามีหน่วยความจำมากมาย
‫และหากคุณไม่มีหน่วยความจำรั่วไหลจำนวนมากในโปรแกรมของคุณ คุณไม่ควรประสบปัญหาเหล่านี้