// 변경 전
fun getSearchImageList(query: String) {
CoroutineScope(Dispatchers.Main).launch {
val imageList = searchRepository.getSearchImageList(query, 1)?.items
val clipList = searchRepository.getSearchClipList(query, 1)?.items
val totalList: MutableList<TotalEntity> = mutableListOf()
imageList?.let { totalList.addAll(it) }
clipList?.let { totalList.addAll(it) }
Log.d("get", searchRepository.getSearchImageList(query, 1)?.items.toString())
totalList.sortByDescending { it.datetime }
_getSearchImageList.value = totalList
}
}
//변경 후
fun getSearchImageList(query: String) {
CoroutineScope(Dispatchers.Main).launch {
val imageList = async(IO) { searchRepository.getSearchImageList(query, 1)?.items }
val clipList = async(IO) { searchRepository.getSearchClipList(query, 1)?.items }
val imageResult = imageList.await()
val clipResult = clipList.await()
val totalList: MutableList<TotalEntity> = mutableListOf()
imageResult?.let { totalList.addAll(it) }
clipResult?.let { totalList.addAll(it) }
Log.d("get", searchRepository.getSearchImageList(query, 1)?.items.toString())
totalList.sortByDescending { it.datetime }
_getSearchImageList.value = totalList
}
}
CS 질문
프로세스는 운영체제로부터 독립된 데이터영역을 할당받는다. 메모리 영역구조는 코드, 데이터, 힙, 스택으로 구성된다.
힙영역은 런타임때 영역크기가 결정되는데 스택영역과 힙 영역은 메모리 영역을 공유하기 때문에 서로의 영역을 침범하는 문제가 발생할 수 있다. 스택이 힙영역을 침범하는 하는 경우 스택 오버플로우
, 힙영역이 스택영역을 침범하는 경우 힙 오버플로우
라고 한다.
힙영역을 너무 크게 잡으면 메모리가 낭비되어 시스템의 전체적인 성능에 영향을 주고 가비지 컬렉션의 오버헤드(추가적인 시간, 자원이 소모됨)가 발생해 메모리를 정리하는 가비지 컬렉터의 메모리를 정리하는 가비지 컬렉션의 수행시간이 너무 길어지게된다.
그래서 JVM에서도 힙영역을 너무 크게 잡지 않고, 힙영역이 꽉 차면 GC진행 후 힙 영역을 확장한다.
Android 질문