일단 씻고 나가자
23.04.18 본문
2023. 04. 18 화요일
- [Java] 문자열의 특정 인덱스 문자를 바꾸고 싶을 때 사용하는 클래스와 함수?
: StringBuilder.setCharAt(index, char);
- [Effective Java] boxing, primitive type의 사용 주의점과 장단점?
: 불필요한 원시 자료형의 wrapper형 사용은 메모리와 시간의 낭비를 초래한다.
예를 들어 반복문 내에서 for { Integer sum += 1; } 의 경우 Integer이라는 boxing 타입은 객체이므로 반복문을 돌며 계속 Integer 객체를 생성하게 된다.
boxing 타입의 남용도 주의해야 하지만, 의도치 않은 Auto Boxing 또한 조심해야 한다.
단, 원시 자료형은 null을 표현할 수 없으므로 적절한 boxing 타입의 사용이 필요하다.
예를 들어 어떤 가격이 아직 정해지지 않았거나, 무료(0원)인 경우는 다르다.
해당 분기를 원시 자료형은 수행하지 못한다.
추가로 우리가 사용하고 있는 메서드의 API를 잘 들여다보아야 한다. 간단히 사용하는 메서드가 사실은 내부적으로 계속해서 객체를 생성하여 값을 출력하고 있다면 메모리의 누수가 생긴다. 예를 들어 string.matches(“regex”);의 경우, matches는 내부적으로 Pattern 객체를 매번 생성하여 판별하기 때문에 메모리에 문제가 생긴다. 이를 해결하기 위해 클래스 내부에서 private한 Pattern 객체를 만들고, 해당 객체의 함수로 매번 판별하는 것이 추천된다.
- [Git] commit message를 수정하는 명령어? 주의사항?
: git commit —amend를 입력하면 커밋 메시지 수정 창으로 이동하며, 메시지를 수정하면 된다.
주의사항은 이는 원격 저장소에 올라가기(push) 전까지만 가능한 부분이다.
- [Git] 하나의 원격 저장소(github)에서 두 개의 지역 저장소를 갖는 방법?
: 우선 각각의 지역 저장소에서 ‘git clone github의 주소 이름’을 수행한다.
두 디렉토리는 cloning이 되어 있으므로, 한쪽에서 작업을 수정하고 push 했다면,
다른 쪽에서 git pull 명령어로 수정된 버전의 코드를 그대로 받을 수 있다.
- 오버레이 기법이란? 가상 메모리란? MMU란? TLB란?
: 초창기 컴퓨터에는 RAM의 용량이 작으면 어플리케이션을 실행할 수 없었기 때문에 메모리 부족 문제를 해결해야 했음.
프로그래머가 애플리케이션 일부분만 기억장치에 올려 실행하도록 지정할 수 있게 하는 오버레이 기법이 탄생했지만, 조금의 차이를 보였을 뿐 궁극적인 문제를 해결하진 못했음.
따라서 애플리케이션의 용량이 RAM의 남은 용량을 넘어도 문제가 없는 것처럼 보이는 가상 메모리 기능이 탄생했다.
가상 메모리란 가상 주소를 통해 RAM이 하드 디스크를 보조 기억장치처럼 사용하게 하는 기술이며, 주요 기능을 담당하는 최소한의 기술을 RAM에 올려놓고 그 이외의 작업을 할 때는 하드 디스크에 접근하여 코드를 읽어오는 방식이다.
순차적으로 코드를 읽어야 하므로 코드가 분할되어 떨어져 있다면 연속성에 위배 되는데, 이를 해결해주기 위해 CPU가 특정 주소로 접근하면 MMU가 가상 주소를 물리 주소로 변환해준다. 이때 모든 코드를 전부 번역하면 작업 부하가 높아지므로, MMU는 RAM을 페이지 단위로 나누어 각 페이지를 하나의 독립된 항목으로 처리한다.
이렇게 논리적인 단위로 나누어진 페이지에 접근하려면 CPU는 페이지 테이블 -> 실제 주소같이 두 번에 걸쳐서 접근할 수밖에 없는데, 이를 빠르게 접근하기 위해 최근에 읽었던 page table을 매핑하여 캐쉬의 역할을 해주는 것이 TLB(Translate Look-aside Buffer)이다.
https://ahnanne.tistory.com/m/15
https://kkhipp.tistory.com/m/167
https://luv-n-interest.tistory.com/1005
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kywpcm&logNo=30168638211
- 배치 프로세스의 한계? 시분할 시스템? 멀티 태스킹? 멀티 프로그래밍? 멀티 프로세싱?
: 여러 프로그램을 쓰지도 못할뿐더러, 서버를 운영한다면 다른 사람이 사용 중인 작업이 끝날 때까지 아무도 사용할 수 없을 것이다. 응답시간 또한 아주 느리다.
이렇게 다중 사용자 지원을 위해 나온 알고리즘이 Time Sharing이다. 시간을 약 1/10초로 나누어, 자원을 기다리고 있는 프로세스에게 교대로 준다. UNIX가 최초로 지원했다.
멀티 태스킹은 시분할과 알고리즘이 비슷하지만, 목적이 조금 다르다. 단일 CPU에서 시분할보다 시간을 더 빠르게 쪼개어 여러 응용 프로그램이 동시에 실행되는 것처럼 보이도록 하는 시스템.
멀티 프로그래밍이란 최대한 CPU를 많이 활용하도록 하는 시스템으로, 특정 프로세스가 요청 사항을 처리하기 위해 아무것도 하지 못하는 상태일 때 다른 프로세스에게 CPU를 넘겨주는 알고리즘. 예를 들어 A 프로세스가 하드 디스크에서 데이터를 읽어오거나 파일 시스템에 요청하여 다음 작업을 처리해야 하는데 그것을 기다리는 동안 기다리고 있는 다른 프로세스에게 CPU를 넘겨주는 것이다.
멀티 프로세싱은 멀티 태스킹과 다르게 다중 CPU에서 하나의 job을 CPU들이 나누어 가져 병렬처리를 하는 것을 말한다.