스레드 풀의 크기를 적절히 설정해야 하는 이유 스레드를 생성하는 것은 비용이 드는 작업이다. 플랫폼마다 오버헤드는 다르지만, 스레드가 생성될 때 요청이 처리되는 지연시간(latency)과 OS에 의한 추가적인 처리 과정에 드는 시간 등 자원이 소모된다. 이러한 스레드 생성 비용을 줄이기 위해 스레드 풀이 필요하다. 스레드 풀에서 미리 생성해둔 스레드를 재사용함으로써 자원 낭비를 막을 수 있기 때문이다. 그렇다면 스레드 풀에 무조건 많은 스레드를 생성해두면 좋을까? 아래에서 자세히 알아보겠지만, 스레드를 많이 생성해둔다고 그 스레드를 다 사용할 수 있는 것은 아니다. 쓸데없이 스레드를 많이 생성한다면 생성하는 데에 드는 자원과 비용이 낭비된다. 그렇다고 스레드를 부족하게 만들어둔다면 CPU 사용률이 낮아지..
Map 컬렉션 클래스 JAVA의 Map 컬렉션 클래스는 Collection 인터페이스를 상속하진 않지만 Collection 자료구조를 이야기 할 때 빠지지 않는다. Map 클래스는 Map 인터페이스를 상속한다. Map 클래스는 중복을 허용하지 않는 Key 값과 그에 대응하는 중복이 허용되는 Value 값이 쌍을 이루어 저장되는 자료구조이다. 이때 Key 값은 Value를 찾기 위한 색인과 같은 역할을 한다. Map 클래스는 요소의 저장 순서를 유지하지 않는다. Key는 중복을 허용하지 않지만, Value는 중복을 허용한다. Map 대표적인 컬렉션 클래스 3가지에 대하여 알아보자. HashMap HashMap 클래스는 Map 클래스에서 가장 많이 사용되는 클래스 중 하나이다. HashMap 클래스는 해시 ..
String Constant Pool이란? 아래와 같은 코드를 살펴보자. String a = "Java"; String b = "Java"; String c = new String("Java"); // 결과 : same if(a == b) { System.out.println("same"); }else { System.out.println("different"); } // 결과 : different if(a == c) { System.out.println("same"); }else { System.out.println("different"); } a와 b는 같다고 나오지만, a와 c는 다르다고 결과가 나온다. 이유가 뭘까? 자바의 String은 두 가지 방법으로 생성할 수 있다. 첫 번째 방법으로 문자열..
JVM(Java Virtual Machine)이란? JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의 중개자 역할을 한다. JVM은 자바 바이트코드를 실행할 수 있는 환경을 제공해준다. 이를 통해 자바 바이트 코드가 플랫폼에 독립적으로 어디서든 실행될 수 있게 한다. 즉, JVM 덕분에 OS에 상관없이 어디서든 JAVA 애플리케이션을 실행할 수 있게 된다. JVM 구성 1. Class Loader(클래스 로더) JVM내로 클래스파일(.class)를 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다. Runtime 시점에 클래스를 로딩하게 해 주며 클래스의 인스턴스를 생성하면 클래스 로더를 통해 메모..
문제 16953번: A → B 첫째 줄에 A, B (1 ≤ A A*2 2. 1을 수의 가장 오른쪽에 추가한다 -> A*10 +1 위의 두 연산을 DFS 형태로 재귀적으로 부르면 브루트포스 방식으로 해결 가능하다. 간단하게 풀렸을것 같지만, 처음 시도했을때 틀렸습니다를 받았다. 뭐가 문제일까 고민하다가, 변수의 타입을 int로 한게 문제였음을 깨달았다. dfs() 함수에서 if(num > B) return; 이라는 코드가 있는데, 만약 num*2를 계속해서 하다가 int의 범위를 벗어나면 이 부분이 문제가 발생할 수 있다. 따라서 int를 long 타입으로 바..