일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 타코와사비
- 오산 회전초밥
- yml파일
- 컴파일에러
- java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'homeController' bean method
- yml유효성
- 정적할당
- 오산주차장
- 아이패드거치대
- 병목현상
- Please enter a commit message to explain why this merge is necessary
- 형제초밥
- 동적할당
- aliexpress
- Java
- 바이트코드
- 알리익스프레스
- 오산초밥
- 컴파일
- 기계어
- 컴파일타임
- RAM
- git오류
- 1490원
- git pull
- 오산공영주차장
- 런타임에러
- 가비지컬렉터
- 육회초밥
- 바이너리코드
- Today
- Total
개발 & 일상
Java Static Link(정적 링크) Dynamic Link(동적 링크) 본문
Static Link(정적 링크)란?
컴파일을 링크과정을 통해 실행파일을 만들때 실행파일에 필요한 라이브러리파일(*.a or *.lib)을 같이 포함시켜서
.exe 파일을 만드는것을 Static Link 정적링킹 이라고 합니다.
컴파일이 끝나면 라이브러리 파일(LIB)이 없이도 프로그램을 실행할 수 있다.
장점
1. 해당 응용프로 그램이 모든 라이브러리를 포함하고 올바른 버전이라는걸 확신할수있다.
2.프로그램 배포시 하나의 실행파일만 제공하게 되어 단순화
3.직접 구현한 코드를 라이브러리화 시켜 기술 유출 방지
4. 컴파일 시간 단축
단점
1. 실행 파일 내에 라이브러리 코드가 저장되기 때문에 메모리를 어마어마하게 잡아 먹는다..
2.하나의 라이브러리를 여러 프로그램이 사용했다면 각 프로그램 마다 똑같은 라이브러리가 중첩되어 사용될수도있다.(메모리낭비)
Dynamic Link (동적 링크)란?
말 그대로 "동적으로 링크를 한다"
Static Link를 사용했을때 메모리에 똑같은게 계속 너무 많이 올라가는 상황이 발생할경우
Dynamic Link 를 사용하면 많이 호출되는 동적 라이브러리파일(*.a or *.lib) 메모리에 올려놓고 그때그때 사용!
실행 파일을 만들 때 프로그램에 라이브러리를 복사시키지 않고 링크시키는 방식이다.
그러면 실행파일에는 호출할 함수의 정보만 포함되고 실제 함수 코드는 복사되지 않으므로 실행파일의 크기는 작아진다.
실행 파일은 실제코드를 가지고 있지 않으므로 프로그램 실행시에 DLL(동적라이브러리)이 꼭 있어야 한다.
동적 링크에는 묵시적 링크 와 명시적 링크가 있다.
장점
1.메모리 요구사항이 훨씬 적다.(실행을 할때마다 필요한 라이브러리를 링크해서 사용하기 때문)
2.다른 프로그램에서 다른 라이브러리를 참조하여 사용할수있다.(공유 라이브러리???)
3.하나의 라이브러리를 여러프로그램이 사용가능하고,
각 프로그램은 같은 라이브러리를 사용하기 때문에 메모리 자원이 낭비되지않음
단점
1. 동적라이브러리가 없으면 런타임 에러가 뜬다.
2.동적링크는 내 프로그램 영역에서 라이브러리가 호출 되는 곳으로 점프로 왔다 갔다 해야함
(overhead 발생) 지속적으로 발생하는 자원소모
묵시적링크
링커는 묵시정 링크 시 소스코드를 컴파일해서 나온 목적 파일과 동적 라이브러리의
어떤 함수를 사용하겠다는 정보가 합쳐 하나의 실행파일을 만든다.
그래서 프로그램 실행 시 동적 라이브러리의 어떤 함수를 사용하겠다는 정보로
동적 라이브러리 파일에서 해당 함수를 메모리에 올려 사용한다. (이게 정적링크 아닌가....동적링크안에 정적링크방식...?)
명시적 링크
링커는 명시적 링크 시 소스코드를 컴파일해서 나온 목적파일과 동적 라이브러리의 어떤 함수를 사용하겠다는 정보가 없다.
대신 프로그램 동작 시 소스코드에서 사용한 API 함수로 사용하려는
라이브러리 파일이 있는지 검사하고 동적으로 해당 함수를 메모리에 올린다.(이방식이 진정한 동적링크 인거같은데...)
이해 안감...
'💻 개발공부 > ☄️ java' 카테고리의 다른 글
CompletableFuture (java 8 안정적인 비동기 처리) (0) | 2023.01.14 |
---|---|
자바(Java)의 역사 (0) | 2023.01.14 |
java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'homeController' bean method 오류 (0) | 2023.01.14 |
List와 ArrayList의 차이점 (0) | 2023.01.14 |