분류 전체보기
-
가변인자(varargs)는 실제 런타임(Runtime) 시 어떻게 작동 할까?Develop/Java 2022. 9. 13. 11:19
가변인자 란? 기존에는 메서드의 매개변수의 개수가 고정적이어서 컬렉션이나 배열을 통해 사용했다. JDK1.5부터 동적으로 매개변수를 지정하는 가변인자라는 것이 생겼다. 아래와 같이 파라미터 변수에 ...을 파라미터 변수명 앞에 붙여주면 된다. public void testVarargs(String... d) { //... } 가변인자를 사용하는 대표적인 메소드는 PrintStream의 printf()이다. /* * @since 1.5 */ public PrintStream printf(String format, Object ... args) { return format(format, args); } 사용 시 주의 할 점 가변인자는 여러개 사용될 수 없고, 가변인자는 항상 마지막에 있어야 한다. (가변인자..
-
JVM 및 스택 프레임Develop/Java 2022. 9. 7. 18:48
1. JVM Memory(Runtime Date Areas) JVM이 운영체제 위에서 실행되면서 할당 받는 메모리 영역(실행 데이터 영역) 클래스로더(class Loader)로 부터 해석된 바이트코드가 각 영역에 배치되어 수행 PC 레지스터(PC Register), JVM 스택(JVM Stack), 네이티브 메서드 스택(Native Method Stack)은 스레드(Thread)마다 하나씩 생성 힙(Heap), 메서드 영역(Method Area), 런타임 상수 풀(Runtime Constant Pool)은 스레드(Thread)가 공유해서 사용 한다. 2. JVM 스택(JVM Language Stacks) 각 스레드 마다 하나씩 존재하며 스레드 시작 시 생성 스택 내 데이터는 다른 Thread가 접근이 불..
-
equals 와 hashcodeDevelop/Java 2022. 8. 16. 16:54
Hash 란? 임의의 길이를 갖는 데이터를 고정된 길이의 데이터로 변환(매핑)하는 것 abcd 라는 문자열이 있다면 이를 특정 길이(ex 256bit, 512bit...)의 데이터로 변환시킨다는 것 (Hashing 이라고 함) 해시함수를 돌리기 전 문자열의 길이가 얼마건 일정한 길이를 얻는다. 변환한 데이터를 다이제스트 라고 한다. Hash를 사용하는 이유? 특정 값에 대한 다이제스트는 변하지 않기 때문에 이 다이제스트의 값을 배열의 위치(index)로 활용 (검색 속도 빠름) 동일한 메세지(값)에 대해서는 동일한 다이제스트를 갖기 때문에 중복을 허용하지 않는다. (HashSet의 기본 개념) HashCode() 자바에서는 hashCode() 메소드를 활용하여, 객체의 주소값을 이용하여 해시 알고리즘에 ..
-
GC(Garbage Collection)가 자주 발생하면 왜 안좋을까?Develop/Java 2022. 8. 10. 15:30
1. GC란? Garbage Collection의 약자 Java Runtime시 Heap 영역에 저장되는 객체 중에서 더 이상 사용하지 않는 객체를 청소하여 공간을 확보하는 작업 공간을 정리 하지 않으면 OOM(OutOfMemmory)이 발생하기 때문 Garbage Collector(가비지 콜렉터)가 메모리 해제를 수행한다. 1-1. GC 동작 원리 1. 메모리 할당 2. 사용 중인 메모리 인식 3. 사용하지 않는 메모리인식 Eden 부터 Survivor 영역까지를 Young 영역이라고 부른다. JDK 8 부터는 Young, Old, Permanent 구분이 사라졌다. 1-2. GC가 처리되는 과정 1) 객체가 생성되어 Eden 영역에 올라간다. 2) Eden 영역이 꽉 차면 Survior영역으로 넘어간..