Java’da strong, soft ve weak referansları açıklayabilir misiniz?. Ne zaman, niye ve nasıl kullananılır?