كيفية إنشاء تسرب للذاكرة في جافا؟ أمثلة وأسباب
مرحباً بالجميع. أنا مطور جافا مبتدئ، وأسمع باستمرار أن جافا تحتوي على جامع القمامة (GC) الذي ينظف الذاكرة تلقائياً. لكن قيل لي أنه حتى مع GC يمكن حدوث تسرب للذاكرة (memory leak). حاولت فهم كيف يكون ذلك ممكناً، لكن جميع الأمثلة التي وجدتها معقدة جداً أو تستخدم إصدارات قديمة من جافا.
أحتاج لكتابة مشروع تعليمي صغير يوضح تسرب الذاكرة، لفهم أفضل لكيفية عمل جامع القمامة وكيفية تجنب مثل هذه المشاكل في العمل الحقيقي. جربت ببساطة إنشاء العديد من الكائنات في حلقة بدون حفظ المراجع — لكن GC يقوم بتنظيفها. كيف يمكن جعل الكائنات تبقى في الذاكرة ولا يتم حذفها؟
هذا مثال جربته، لكنه لا يؤدي إلى تسرب:
```java
public class MemoryLeakTest {
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 1000000; i++) {
String s = new String("test" + i);
}
System.gc();
Thread.sleep(100
}