ऑब्जेक्ट जीवन चक्र में स्मृति का प्रबंधन करने के लिए जावा एक का उपयोग करता है। प्रोग्रामर निर्धारित कर लेता है कब ऑब्जेक्ट का निर्माण होगा और एक बार ऑब्जेक्ट जब और उपयोग के लायक नहीं रह जाता तो उसके स्मृति को पुनः प्राप्त करने की जिम्मेदारी जावा रनटाइम की होती है। एक बार जब ऑब्जेक्ट का कोई सन्दर्भ बाकी नहीं रहता, तब अगम्य (अनरिचेबल) ऑब्जेक्ट संग्राहक द्वारा स्वतः मुक्त होने के योग्य हो जाता है। कुछ कुछ मेमोरी रिसाव के समान तब भी जारी रह सकता है अगर एक प्रोग्रामर का कोड किसी ऑब्जेक्ट का एक सन्दर्भ जिसकी अब और जरूरत नहीं है उसे पकड़ता है, उसी तरह जब ओब्जेक्ट्स जिसकी और जरूरत नहीं है वह उस कंटेनर में संग्रहित है जो अभी भी इस्तेमाल में है। अगर अस्तित्वविहीन ऑब्जेक्ट के लिए पद्धतियों को बुलाया जाता हैं, एक "नल पॉइंटर एक्सेप्शन" फेंका जाता है।

जावा के स्वचालित स्मृति प्रबंधन मॉडल के पीछे एक विचार यह है कि प्रोग्रामर्स नियमित स्मृति प्रबंधन को प्रर्दशित करने का बोझ थोड़ा कम कर ले. कुछ भाषाओं में ऑब्जेक्ट के निर्माण के लिए स्मृति स्टेक पर अनुमान से आवंटित की जाती है या स्पष्टतया आवंटित होती है और ढेर (हीप) से पुनः आवंटित की जाती हैं। हर तरह से स्मृति प्रबंधन की जिम्मेदारी प्रोग्रामर के साथ रहती है। अगर कार्यक्रम किसी ऑब्जेक्ट को पुनःआवंटन नहीं करता है तो एक स्मृति रिसाव उत्पन्न होने लगता है। अगर कार्यक्रम स्मृति का अभिगमन या पुनः आवंटित करने का प्रयास करता है जो पहले ही पुनःआवंटित किया जा चुका है, तब परिणाम का अनुमान लगाना और व्याख्या करना मुश्किल हो जाता है और कार्यक्रम संभवतः या तो अस्थिर और/या तो समाप्त हो जाता हैं। इसे स्मार्ट संकेतों के इस्तेमाल से अंशतः ठीक किया जा सकता है लेकिन यह ऊपरिव्यय और जटिलता को बढाता है।

कचरा संग्रहण किसी भी समय हो सकता है। आदर्शतः यह तब होगा जब कार्यक्रम खाली रहता है। अगर नए ऑब्जेक्ट को आवंटित करने के लिए स्वतंत्र स्मृति अपर्याप्त है तब इसका चलाया जाना निश्चित है, यह क्षणभर के लिए एक कार्यक्रम स्थापित करने का कारण बन सकता है। स्पष्ट स्मृति प्रबंधन जावा में संभव नहीं है।

जावा C/C++ शैली सूचक अंकगणित को समर्थन नहीं करता है, जहां पर ऑब्जेक्ट एड्रेस (पता) और अचिन्हित इंटीजर्स (आमतौर पर लम्बे इंटीजर्स) को अदला-बदली करके उपयोग किया जा सकता हैं। यह कचरा कलेक्टर को सन्दर्भित ऑब्जेक्टस को स्थानांतरित करने की अनुमति देता है और इसका बचाव और सुरक्षा सुनिश्चित करता है।

जैसा कि C++ और कुछ दूसरे ऑब्जेक्ट-उन्मुख भाषाओँ में, जावा के परिवर्तनीय प्राथमिक प्रकार ऑब्जेक्ट नहीं है। प्राथमिक प्रकारों की उपयोगिता को या तो क्षेत्रों (ऑब्जेक्ट के लिए) में प्रत्यक्ष रूप से संचित किया जाता है या ढेरों पर (पद्धति के लिए) ना कि स्टेक पर, जैसा ऑब्जेक्ट के लिए सामान्य तौर पर सही है (लेकिन बचाव विश्लेषण देखें)। जावा के डिजाईनरों द्वारा प्रदर्शन के कारण लिया गया यह एक सजग निर्णय था। इसके कारण, जावा को एक शुद्ध ऑब्जेक्ट-उन्मुख प्रोग्रामिंग भाषा नहीं माना गया। जो कुछ भी हो, जैसा कि जावा 5.0, स्वतः संचालन प्रोग्रामर्स को आगे बढ़ने के लिए सक्षम बनाता है अगर प्राथमिक प्रकारें उनके आवरण श्रेणियों के उदाहरण होते हैं।

सर्वलेट
स्वचालित स्मृति (मेमोरी) प्रबंधन
घुमावदार अनुप्रयोग (swing application)
इंजीलवाद