Skip to main content

การอ้างอิงที่อ่อนนุ่มคืออะไร?

ใน Java reg;ภาษาการเข้ารหัสการอ้างอิงอย่างต่อเนื่องจะทำกับวัตถุสตริงและตัวแปรแม้ว่าโปรแกรมเมอร์จะไม่ทราบถึงการอ้างอิงเหล่านั้นการอ้างอิงเหล่านี้สื่อสารโดยตรงกับตัวเก็บขยะฟังก์ชั่นที่รวบรวมข้อมูลที่ไม่จำเป็นและทิ้งมันไปดังนั้นจึงไม่ใช้ความทรงจำอีกต่อไปโดยค่าเริ่มต้นการอ้างอิงทั้งหมดมีการอ้างอิงที่แข็งแกร่งและถูกตั้งค่าโดยไม่มีการเข้ารหัสใด ๆ หมายความว่าพวกเขาจะไม่ถูกปล่อยออกไปยังนักสะสมขยะการอ้างอิงที่อ่อนนุ่มช่วยให้ข้อมูลถูกโยนทิ้งไปมันเป็นข้อมูลอ้างอิงระดับกลางสำหรับการอ้างอิงที่ไม่แข็งแกร่งทั้งหมด

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

ข้อมูลบางอย่างจำเป็นต้องถูกโยนทิ้งไปแม้ว่าจะใช้หน่วยความจำจำนวนมากตัวอย่างเช่นหากโปรแกรมเมอร์สร้างสคริปต์ที่มีการใช้หมายเลขซีเรียลหรือข้อมูลชั่วคราวอื่น ๆ ถูกรวบรวมหรือสร้างขึ้นการถือข้อมูลนี้จะกลายเป็นอันตรายJava reg;โปรแกรมจะปฏิเสธที่จะทิ้งข้อมูลแม้ว่าจะไม่จำเป็นและสคริปต์จะต้องใช้หน่วยความจำมากขึ้นเรื่อย ๆ

โดยการระบุสตริงหรือส่วนเป็นข้อมูลอ้างอิงที่อ่อนนุ่มซึ่งจำเป็นต้องวางในการเข้ารหัสบอกผู้รวบรวมขยะว่าสามารถปล่อยข้อมูลได้เมื่อปล่อยออกมาสตริงหรือส่วนจะอ่านเป็น NULLตัวเก็บขยะขึ้นอยู่กับการตั้งค่าจะตัดสินใจว่าควรโยนข้อมูลเมื่อใด

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

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