본문 바로가기
[도서 정리] 안드로이드 앱 성능 최적화 #2 안드로이드 디바이스 랩 만들기 안드로이드 앱 성능 최적화 #2 안드로이드 디바이스 랩 만들기 이 글은 “안드로이드 앱 성능 최적화” 의 일부 내용만 정리한 것입니다.자세한 내용은 책을 구매하여 보세요~-구글에서는 전 세계적으로 활성화된 안드로이드 기기가 14억 대가 넘었다고 발표했다.전 세계에 보급된 전체 스마트폰의 80% 에 해당하는 수치이다. -TestDroid 의 연구에 따르면 상위 20% 기기를 테스트해보려면 12대의 기기가 필요하다.50% 를 테스트해보려면 최소 60대의 기기가 필요하다. 미국 시장으로 한정하더라도 66% 를 테스트해보려면 25대의 기기가 필요하고90% 정도를 테스트해보려면 128대의 기기가 필요하다고 하다. 2.1. 고객들은 어떤 기기를 사용하나요 -2016년 9월 기준 킷캣(KK)은 27.7%, 젤리빈(J.. 2018. 6. 23.
Efficient Android Threading #1 자바의 멀티스레딩,안드로이드 스레드 Efficient Android Threading #1 자바의 멀티스레딩,안드로이드 스레드 이 글은 Efficient Android Threading 의 일부 내용만 발췌한 내용입니다.자세한 내용은 책을 구입해서 보세용. -동시 실행 설계 자원의 생성과 해체의 빈도를 감소시키기 위해 항상 새로운 스레드를 만드는 것보다 재사용을 권장한다. 필요 이상으로 스레드를 사용하지 않는다. 사용하는 스레드가 많을수록 더 많은 메모리와 프로세서 시간이 소비된다. -App 관점에서 스레드는 UI, 바인더, 백그라운드 thread 로 3가지 유형이 있다. -바인더 스레드는 IPC 에 사용된다.각 프로세스는 Thread pool 을 유지한다.Thread pool 은 종료되거나 재생성되지 않지만, 프로세스 안에서 다른 스레드.. 2018. 3. 17.
[iOS Study] 병렬 프로그래밍 가이드 ( 병렬 앱 디자인 ) [iOS Study] 병렬 프로그래밍 가이드 ( 병렬 앱 디자인 ) https://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/ConcurrencyandApplicationDesign/ConcurrencyandApplicationDesign.html#//apple_ref/doc/uid/TP40008091-CH100-SW1 -전통적 방법으로의 복수개의 코어를 사용하는 방법은 여러개의 thread 를 만들어 사용하는 것이다.그러나 thread 를 사용한 코드는 scale 측면에서 좋지 않다.core 가 처리하기 좋은 thread 의 갯수를 아는 것도 쉽지 않고, thread 들을 효율적으.. 2017. 7. 1.
[Java] nio vs. io ( 성능, 개념 ) [Java] nio vs. io ( 성능, 개념 ) http://eincs.com/2009/08/java-nio-bytebuffer-channel-file/ -기존 자바 io 는 커널 버퍼를 직접 핸들링 할 수 없어 JVM 이 내부 메모리에 불러온 후 데이터에 접근할 수 있었다.JVM 내부 메모리 복사과정에 오버헤드가 생긴다. 여기서 말하는 오버헤드는 CPU 오버헤드, 메모리 오버헤드(GC 대상), Thread blocking 등이 있겠다. -nio 는 direct buffer 로 커널 버퍼를 직접 핸들링하기 떄문에 빠르다.기존 io 의 단점을 보완한다. direct buffer 를 이용하려면 ByteBuffer.allocateDirect( size ) 를 통해서 buffer 를 생성해야 한다. -nio.. 2017. 6. 13.
[Server구축/Tutorial] Top 에 대한 이야기 [Server구축/Tutorial] Top 에 대한 이야기 -Linux 시스템의 자원인 CPU, Memory 등의 사용률을 살펴보는 명령어. -CPU 에서 %us 는 커널이 아닌 user 에 의한 점유율 %sy 는 커널(system)에 의해 사용되는 CPU 점유율 %id 는 유휴(idle) CPU -메모리는 물리 메모리와 Swap 메모리로 구성된다. Swap 항목 부분의 used 수치가 지속적으로 증가하면 시스템 메모리가 매우 부족한 상황 total 은 전체 메모리 용량을 의미 used 는 현재 사용되고 있는 메모리 용량 free 는 사용되지 않는 여유 메모리 용량 실제로 linux 서비스를 운영하다 보면 항상 free 수치가 급격히 줄어드는데, 이는 메모리 부족이 아니라 linux 커널의 특징이다.메모.. 2017. 5. 13.
[Java Concurrency] 자바 메모리 모델 [Java Concurrency] 자바 메모리 모델 - 자바 메모리 모델(JMM, Java Memory Model) 의 내부 구조가 어떻게 동작하는지를 이해하고 있다면 상위 개념을 훨씬 효율적으로 쉽게 사용할 수 있을 것이다. 16.1. 자바 메모리 모델은 무엇이며, 왜 사용해야 하는가? - 특정 스레드에서 aVariable 이라는 변수에 값을 할당한다고 해보자. aVariable = 3; 자바 메모리 모델은 "스레드가 aVariable에 할당된 3이란 값을 사용할 수 있으려면 어떤 조건이 돼야 하는가?" 에 대한 답을 알고 있다. 동기화 기법을 사용하지 않는 상태라면 특정 스레드가 값이 할당되는 즉시, 심지어는 영원히 3이라는 값을 읽어가지 못하게 하는 여러 가지 상황이 발생할 수 있다. - JMM 은.. 2017. 5. 10.
[Java Concurrency] 성능, 확장성 #1 [Java Concurrency] 성능, 확장성 - 스레드를 사용하는 가장 큰 목적은 바로 성능을 높이고자 하는 것이다. 스레드를 사용하면 시스템의 자원을 훨씬 효율적으로 활용할 수 있고, 앱으로 하여금 시스템이 갖고 있는 능력을 최대한 사용하게 할 수 있다. 그와 동시에 기존 작업이 실행되고 있는 동안 새로 등록된 작업을 즉시 실행할 수 있는 준비를 갖추고 있기 때문에 앱의 응답 속도를 향상시킬 수 있다. - 성능을 높이는 방법은 대부분 앱의 내부 구조를 복잡하게 만들어야 하는 경우가 많고, 따라서 안전성과 활동성에 문제가 생길 가능성도 적지 않다. 최악의 경우에는 성능을 높이기 위해 적용한 프로그래밍 기법 때문에 프로그램의 다른 부분에서 역효과를 가져오거나 성능상에 문제를 일으킬 수도 있다. - 성능.. 2017. 5. 3.
[Server구축/Tutorial] 리눅스 기본 폴더 구조 [Server구축/Tutorial] 리눅스 기본 폴더 구조 -/ 루트 최상위 디렉토리 bin, etc, boot, mnt, usr, lib, home, dev, proc, var, sbin, tmp, root, lost+found 등의 폴더들을 가지고 있다. -/bin binaries 의 약어로 이진 파일들을 가지고 있다. 리눅스의 가장 기본 명령어들을 담고 있다. -/etc 리눅스 시스템에 관한 각종 환경설정에 연관된 파일들과 디렉토리들을 가진 디렉토리. 대부분의 파일들이 시스템 관리자에 의해 관리되는 파일들 웹 서버 환경 설정, 시스템 계정 사용자 정보, 패스워드 관리, 시스템의 파일 시스템 관리 파일, 여러 가지 시스템 보안에 관련된 파일들, 시스템 초기화 설정 파일, TCP/IP 설정 파일 등 시.. 2017. 4. 30.
[Java Concurrency] 스레드 풀 활용 [Java Concurrency] 스레드 풀 활용 8.1. 작업과 실행 정책 간의 보이지 않는 연결 관계 - 일정한 조건을 갖춘 실행 정책이 필요한 작업에는 다음과 같은 것들이 있다. 의존성이 있는 작업 스레드 한정 기법을 사용하는 작업 응답 시간이 민감한 작업 ThreadLocal 을 사용하는 작업 - 스레드 풀은 동일하고 서로 독립적인 다수의 작업을 실행할 때 가장 효과적이다. - 특정 작업을 실행하고자 할 때 그에 맞는 실행 정책을 요구하는 경우도 있고, 특정 실행 정책 아래에서는 실행되지 않는 경우도 있다. 다른 작업에 의존성이 있는 작업을 실행해야 할 때는 스레드 풀의 크기를 충분히 크게 잡아서 작업이 큐에서 대기하거나 등록되지 못하는 상황이 없도록 해야 한다. 스레드 한정 기법을 사용하는 작업.. 2017. 4. 27.
반응형