| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 자이고트
- Dispatchers
- NestedScrollView
- 내부 단편화
- AAC
- AsyncListDiffer
- 뷰홀더
- 물리 메모리
- 데코레이터 패턴
- GetX
- Android
- 안드로이드
- http 역사
- appcompatacitivity
- 운영체제
- apk 빌드 과정
- 리사이클러뷰풀
- 상태관리
- recyclerview
- 절대 주소
- Kotlin
- 리사이클러뷰
- DiffUtil
- 디자인 패턴
- appcompatactivity
- viewModelScope
- flutter
- http발전과정
- 프로세스
- 플로이드워셜
- Today
- Total
목록Develop/Java (16)
hong's android
Synchronized 사용 이유 멀티 스레드를 이용해서 한 프로그램에서 동시에 다른 스레드들을 실행할 수 있다. 하지만 동시에 동일한 변수, 객체, 메서드에 접근한다면 원하지 않은 값을 결과로 얻을 수 있다. 예를 들어, Int limit = 10; 이란 값을 가진 클래스가 존재한다. main에서 두 개의 스레드를 실행해 메서드 실행을 완료한 후 limit의 값을 1 뺀다. (Limit 값이 0 이상에 있을 때만 값을 가져오게 하고 싶다.) 두 개의 스레드에서 동시에 limit이 위 메서드에 접근했다고 치면, 동시에 접근했을 때 두 개의 스레드 모두 조건에 만족한 뒤 메서드를 실행해서 limit 값을 1 빼준다. 그러면 결국 -1이 되므로 원하는 값을 가져오지 못한다. 위 예는 두 개의 스레드 밖에 없..
리플렉션이란? 동적으로 클래스의 정보를 분석하거나, 클래스의 메소드를 호출 할 수 있게해주는 api 리플렉션 단점 1.컴파일 최적화를 하지 못한다. 리플렉션을 실행하는 부분은 미리 실행 내용에 대한 정보를 알지 못하므로 jvm은 컴파일 타임에 최적화 하지 못한다. JIT Compiler의 Bytecode Caching, Opcode Optimization.. 등 초기 호출 이후로는 캐싱을 통해서 Reflection API를 통한 메서드 호출도 최적화된다는 것을 의미한다. 2.정적으로 타입 검사를 하지 못한다. 정적을 타입 검사를 하지 못하므로 런타임에 타입 오류가 날 수 있다. 3.캡슐화 저해 접근 제한자에 상관없이 리플렉션은 접근 할 수 있다. 그럼에도 불구하고 왜 필요한가? 컴파일 타임에는 알 수 없..
Garbage Collector Gc의 수거대상 Gc root로부터 참조를 탐색했을 때, unreachable 한 객체 Gc root 1) 스택 영역의 데이터들 2) 메소드 영역의 데이터들 3) JNI에 의해 생성된 객체들 *JNI : os에 종속적인 프로그램을 실행시키기 위한 프레임 워크 또는 c, c++ 등 다른 언어로 작성된 라이브러리를 호출하거나 반대로 호출되는 것을 가능하게 해주는 프레임워크 Gc가 언제 일어날까? 위와 같이 새로운 객체들은 Young Generation 영역에, 만든지 비교적 오래된 객체들은 Old Generation에 저장한다. 일반적인 Gc 동작 Minor Gc Young Generation에서 일어나는 Gc, Eden 영역이 가득 차면 발생한다. 1. 새로운 객체가 만들어..
래퍼 클래스로 계산하면 안될까? 원시 타입이 필요한이유 래퍼클래스 참조타입이기때문에 원시타입보다 크다. 원시형의 데이터를 가져오는것보다 래퍼 클래스 형태의 객체를 가져오는것이 비효율적이고 더 느리다. 그 이유는 래퍼 클래스는 객체이다. 래퍼클래스로 된 객체를 메모리에 저장하기 위한 데이터들은 아래와 같습니다. (32비트 기준) 아래와 같습니다. housekeeping 정보로 구성된 12 bytes의 object header 공간이 있습니다. primitive fields는 각자 정해진 크기만큼 차지합니다. reference fields는 4 bytes를 차지합니다. array 배열은 16 bytes가 필요합니다. object 공간 12 bytes + array length 공간 4 bytes object..
Map 인터페이스 Set 인터페이스와 다르게 key와 value를 이용한다. Collection 인터페이스에 속한 구현체 클래스를 상속받은 구현 클래스 종류 HashMap 키에 대한 해시값을 사용해서 해당 값을 인덱스로 하여 배열을 만든다. Thread-safe 하지 않다. 그렇기 때문에 Collections.synchronizedMap(new HashMap(…)); 으로 사용하거나 null을 허용한다. 또는 java.util.concurrent 패키지의 ConcurrentHashMap 클래스를 사용할 수 있다. HashTable Collection 인터페이스 이전에 나온 HashTable, synchronized를 사용해서 thread-safe 하다. 하위 호환성에 가치를 두기 때문에 HashMap에 ..
자바는 jvm이라는 가상머신 덕분에 플랫폼(os) 독립적이다. 보통 c 나 c++ 같은 언어는 프로그램을 개발했던 환경에서만 정상적으로 실행할 수 있다. 해당 기계어로 변환되어 있기 때문이다. 반면 자바는 프로그램을 개발했던 환경에 구애받지 않고 어떠한 환경에서도 정상적으로 작동이 된다. 자바는 .class 라는 바이트 코드를 jvm에서 기계어로 변환하는 과정을 거치는데 이 과정에서 jvm은 해당 os에 맞는 기계어로 번역해 주기 때문이다. Jvm 동작 원리 1. 자바소스를 컴파일 자바 컴파일러에 의해 바이트 코드(. class )로 컴파일된다. 2. 객체?를 참조할 때 classLoader는 동적로딩을 통해서 필요한 클래스를 JVM 메모리에 올린다. 3. 실행엔진(Execution Engine)에 의해..