- การเก็บขยะคืออะไร?
- วิธีการเรียกว่าเมื่อใด
finalize
? - จะเกิดอะไรขึ้นถ้า
finalize
มีข้อยกเว้นเกิดขึ้นในวิธีการ? - เกิดอะไรขึ้น
SoftReference
? - เกิดอะไรขึ้น
WeakReference
? - เกิดอะไรขึ้น
PhantomReference
? - มันทำงานอย่างไร
WeakHashMap
? มันใช้ที่ไหน? - ทำไมคุณต้องส่งคิวไปยังตัวสร้าง
PhantomReference
? - ทำไมคุณถึงต้องการคนตัดไม้?
- คุณรู้จักการตั้งค่าตัวบันทึกอะไรบ้าง
-
นี่เป็นกลไกในการทำลายวัตถุที่ไม่จำเป็น วัตถุที่ไม่จำเป็นคือวัตถุที่ไม่ได้ใช้ มีสองวิธีในการค้นหาออบเจ็กต์ดังกล่าว: การนับการอ้างอิงและการติดตาม ในกรณีแรก แต่ละออบเจ็กต์จะเชื่อมโยงกับตัวแปรที่เก็บจำนวนการอ้างอิงไปยังออบเจ็กต์นี้ หากตัวเลขนี้ลดลงเหลือศูนย์ ถือว่าวัตถุนั้นตายแล้ว ในกรณีที่สอง ตัวรวบรวมขยะจะติดตามการอ้างอิงอ็อบเจ็กต์จากจุดรากไปยังจุดสิ้นสุด (จนถึงค่า null) โดยผ่านแผนผังทั้งหมด วัตถุที่ไม่สามารถเข้าถึงได้จากจุดรากถือว่าตายแล้ว จุดรากคือเธรดที่ใช้งานอยู่ทั้งหมด วิธีการหลัก อาร์กิวเมนต์ของวิธีการ
main()
เช่นเดียวกับตัวแปรคงที่ทั้งหมดของคลาสที่มีวิธีการmain()
อยู่การพิจารณาว่าวัตถุใดมีสิทธิ์ทำลายเป็นเพียงส่วนแรกของงานของคนเก็บขยะเท่านั้น ส่วนที่สองคือการลบออกและทำงานกับหน่วยความจำ ใช้วิธีการแบบไฮบริดที่นี่ หน่วยความจำทั้งหมดที่มีสำหรับวัตถุแบ่งออกเป็นสามส่วน: พื้นที่ของวัตถุอายุน้อย, พื้นที่ของวัตถุเก่า และพื้นที่ของวัตถุถาวร (เหล่านี้คือคลาส, ข้อมูลเมตา, สตริงที่อยู่ภายใน ฯลฯ ) พื้นที่แรกแบ่งออกเป็นสามพื้นที่ย่อยเพิ่มเติม: Eden และพื้นที่ผู้รอดชีวิต 1 และ 2 Eden เก็บวัตถุที่สร้างขึ้นใหม่ทั้งหมด สองโซนที่เหลือจะจัดเก็บออบเจ็กต์ที่รอดจากการรวบรวมขยะครั้งล่าสุด รถเก็บขยะทำงานร่วมกับพื้นที่ทั้งหมดนี้ (พื้นที่ของวัตถุเล็ก) ดังนี้ ในระหว่างการเก็บขยะครั้งต่อไป เขาพบวัตถุมีชีวิตในพื้นที่อีเดนและคัดลอกไปยังพื้นที่ผู้รอดชีวิตคนที่สอง หลังจากนี้เขายังมองหาวัตถุมีชีวิตในพื้นที่แรกและคัดลอกไปยังพื้นที่ที่สองของผู้รอดชีวิตหรือหากพวกมัน "แก่" เพียงพอแล้วไปยังพื้นที่ของคนรุ่นเก่า หลังจากนั้นเขาจะเคลียร์พื้นที่เอเดนและพื้นที่ผู้รอดชีวิตกลุ่มแรก ต่อไปเขาถือว่าพื้นที่ที่สองของผู้รอดชีวิตเป็นพื้นที่แรก เพียงเท่านี้การเก็บขยะก็สิ้นสุดลงสำหรับบริเวณนี้
Для второй области сборка мусора идёт несколько по-другому. Там есть одна большая область, она ни на что не делится, но сборщик мусора все живые an objectы в ней во время своей работы перемещает в начало области. Соответственно, вторая часть области будет состоять только из пустого пространства и мёртвых an objectов. После этого сборщик мусора завершает свою работу.
-
Перед уничтожение an object сборщиком мусора. Также можно вручную запустить вызовы этого метода у всех недостижимых an objectов, для этого надо вызвать метод
System.runFinalization()
orRuntime.getRuntime().runFinalization()
. -
Это исключение будет проигнорировано, и произойдёт выход из метода.
-
SoftReference
переводится How "мягкая link". Эта link на an object, но более слабая, чем обычная link (StrongReference). Объекты, на которые сущесвуют только мягкие ссылки, называются мягcodeостижимыми. Такие an objectы не уничтожаются в обычном случае. Но если у JVM закочиналась память, то сборщик мусоры удаляет все такие an objectы. -
WeakReference
— это так называемая слабая link на an object. Она ещё слабее Soft-ссылки. Все an objectы, на которые существуют только слабые ссылки, будут удалены при ближайщей сборке мусора. -
PhantomReference
— это самая слабая link. Механизм работы с такими link запускается только если на an object нет больше ниHowих других ссылок. Призрачные ссылки используются для сложной proceduresы удаления an object. Это может быть необходимо, если an object делает что за граница Java-машины, например, вызывает низкоуровневые функции ОС or пишет своё состояние в файл, or делает ещё что-то важное и сложное.Механизм работы с такими linkми следующий. Если на an object не осталось больше ниHowих других ссылок, и у него переопределён метода
finalize()
, то этот метода будет вызван во время ближащей сборки мусора. Если же этот метод не переопределён, то этот an object пропускает текущую сборку мусора, и попадает только в следующую. Во время этой (следующей) сборки мусора данный an object помещается в очередь призрачных an objectов, из которой будет удалён, когда у его призрачной ссылки вызовут методclear()
. Также стоит отметить, что методаget()
у призрачной link всегда возвращает null (в отличие от двух других несильных ссылок, у которых он возвращаетnull
, только если an object уже уничтожен). -
WeakHashMap
— этоHashMap
, у которого ключами являются слабые ссылки. Поэтому, если во время ближайшей сборки мусора будет обнаружено, что на an object существует только link вWeakHashMap
, то изWeakHashMap
будет удалена вся пара "ключ-meaning", связанная с этим an objectом.В связи с этим данная коллекция может быть использована для хранения Howой-то дополнительной, не очень важной информации об an objectе. Также её удобно использоваться для хранения Howой-то временной информации (которая нужная только в рамках данной операции).
-
Эта очередь используется для отслеживания того, что an object больше не нужен. Может быть использовано для закрытия ресурсов, открытых данным an objectом (например, удаление созданных файлов).
-
จำเป็นต้องมีตัวบันทึกเพื่อบันทึกข้อมูลเกี่ยวกับพฤติกรรมของโปรแกรมตลอดจนสถานะบางอย่างของโปรแกรม สามารถใช้สำหรับการดีบักและระบุข้อผิดพลาดและความล้มเหลวของโปรแกรม ตัวบันทึกยังช่วยให้นักพัฒนาสามารถรับคำติชมจากโปรแกรมของเขาในขณะที่มันกำลังทำงานอยู่ นอกจากนี้ ในกรณีที่เกิดความล้มเหลวร้ายแรง ผู้บันทึกสามารถแจ้งบุคคลที่เหมาะสมได้อย่างรวดเร็ว (เช่น นักพัฒนา ลูกค้า ผู้จัดการโครงการ ฝ่ายสนับสนุนด้านเทคนิค ฯลฯ) เกี่ยวกับความล้มเหลวเหล่านี้
-
เมื่อตั้งค่าการบันทึก คุณสามารถระบุสิ่งต่อไปนี้:
- สถานที่ที่จะเขียนข้อมูล (ไฟล์, คอนโซล, ฐานข้อมูล, เครือข่าย ฯลฯ )
- จะบันทึกข้อความระดับใด
- ประเภทของรายการบันทึก
- สำหรับไฟล์ คุณสามารถระบุ: พาธไปยังไฟล์และไดเร็กทอรี ขนาดไฟล์ จำนวนไฟล์
- ระบุระดับข้อความของตัวเองที่จะเขียนลงในบันทึกสำหรับแต่ละแพ็คเกจ
GO TO FULL VERSION