← Назад к вопросам
Какие знаешь виды памяти?
1.0 Junior🔥 111 комментариев
#JVM и память#Производительность и оптимизация
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Виды памяти в Android
В Android существует несколько типов памяти с разными характеристиками.
1. RAM (оперативная память)
Heap:
- Память для объектов Java
- Управляется Garbage Collector
- Ограничена размером (обычно 128-512MB)
val obj = MyObject() // Выделяется в Heap
val list = mutableListOf<String>() // В Heap
var name = "John" // Обычно оптимизируется в String Pool
Stack:
- Память для локальных переменных
- Управляется автоматически
- Быстрее, чем Heap
- Ограничена (обычно 1-8MB)
fun example() {
val x = 10 // На Stack
val y = 20 // На Stack
val obj = MyObject() // Ссылка на Stack, объект в Heap
}
2. ROM (постоянная память)
Internal Storage:
- Приватное хранилище приложения
- Не видно другим приложениям
- Удаляется при удалении приложения
// Сохранение файла
val file = File(context.filesDir, "data.txt")
file.writeText("Hello")
// Чтение
val content = file.readText()
External Storage:
- Общее хранилище (SD card или вспомогательное)
- Видно другим приложениям
- Требует разрешений
// Требует WRITE_EXTERNAL_STORAGE
val file = File(Environment.getExternalStorageDirectory(), "myfile.txt")
3. Cache Memory
App Cache:
- Временные данные
- Может быть очищено системой
- Не требует разрешений
val cacheDir = context.cacheDir
val cacheFile = File(cacheDir, "temp.txt")
4. Shared Preferences
val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE)
// Сохранение
prefs.edit().apply {
putString("username", "John")
putInt("age", 30)
apply()
}
// Чтение
val username = prefs.getString("username", "default")
5. SQLite Database
@Entity
data class User(
@PrimaryKey val id: Int,
val name: String
)
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
6. Memory Profiler для отладки
Android Studio → Profiler → Memory
- Native Memory
- Graphics Memory
- Bitmap Memory
- Java Objects
Сравнение типов памяти
| Тип | Скорость | Размер | Доступ | Сохранение |
|---|---|---|---|---|
| Stack | Очень быстро | Маленький | Программе | Сессия |
| Heap | Быстро | Средний | Программе | GC удалит |
| Cache | Быстро | Средний | Приложению | До 100MB |
| Internal | Медленно | Большой | Приложению | Постоянно |
| External | Медленно | Большой | Всем | Постоянно |
| SQLite | Медленно | Большой | Приложению | Постоянно |
Memory Leaks - утечки памяти
// ПЛОХО: утечка через static reference
class MyActivity : AppCompatActivity() {
companion object {
var instance: MyActivity? = null // Утечка!
}
init {
instance = this
}
}
// ХОРОШО: использовать WeakReference
class MyActivity : AppCompatActivity() {
companion object {
var instance: WeakReference<MyActivity>? = null
}
init {
instance = WeakReference(this)
}
}
OutOfMemoryError - переполнение памяти
// ПРОБЛЕМА: создание больших списков
val hugeList = mutableListOf<LargeObject>()
for (i in 0..1000000) {
hugeList.add(LargeObject())
} // OutOfMemoryError!
// РЕШЕНИЕ: использовать Stream или Iterator
var count = 0
while (count < 1000000) {
processObject()
count++ // Не создаем список
}
Оптимизация памяти
✅ Делай так:
- Используй примитивные типы где возможно
- Кешируй ресурсы
- Очищай references при finish()
- Используй WeakReference для callback'ов
- Мониторь память в Profiler
❌ Избегай:
- Static references на UI объекты
- Больших массивов в памяти
- Утечек через listeners
- Неиспользуемых объектов
Мониторинг памяти
// Получить информацию о памяти
val runtime = Runtime.getRuntime()
val maxMemory = runtime.maxMemory() / (1024 * 1024)
val totalMemory = runtime.totalMemory() / (1024 * 1024)
val freeMemory = runtime.freeMemory() / (1024 * 1024)
println("Max: ${maxMemory}MB, Total: ${totalMemory}MB, Free: ${freeMemory}MB")
// Форсировать сборку мусора
System.gc() // Не рекомендуется!
Вывод
Виды памяти в Android:
- Stack - локальные переменные (быстро, ограничено)
- Heap - объекты Java (управляется GC)
- Internal Storage - приватное хранилище
- External Storage - общее хранилище
- Cache - временные данные
- SharedPreferences - ключ-значение
- SQLite - реляционная БД
Правильное управление памятью критично для производительности приложения.