Avatar ·

كيفية إنشاء تسرب للذاكرة في Java؟ أمثلة كود وشرح

مرحبًا بالجميع! أنا مطور Java مبتدئ، وأنا مهتم جدًا بموضوع إدارة الذاكرة. أعلم أن في Java يوجد جامع القمامة (Garbage Collector) الذي يحرر الذاكرة تلقائيًا من الكائنات التي لا توجد مراجع لها. لكن قيل لي أنه حتى في Java يمكن إنشاء تسرب للذاكرة إذا كتبت الكود بشكل غير دقيق. أحاول فهم كيف يحدث هذا بالضبط. كتبت مثالًا بسيطًا، لكنني لست متأكدًا من صحته. إليك الكود: ```java import java.util.ArrayList; import java.util.List; public class MemoryLeakExample { private static List list = new ArrayList<>(); public static void main(String[] args) { while (true) { list.add(new Object()); } } } ``` هذا الكود، من الواضح، سيسبب OutOfMemoryError، لأننا نضيف كائنات بشكل لا نهائي إلى قائمة ثابتة. لكن هذا أشبه بـ "فيضان" وليس تسربًا. أنا مهتم بمعرفة حالات أكثر دقة حيث لا يستطيع GC جمع الكائنات، على الرغم من أننا نعتقد أنها لم تعد مطلوبة.