개요Java의 특성이자 장점인 Object에 대한 동적할당이 때로는 우리의 발목을 잡는다. 일반적으로 대부분의 문제들은 log4J로 생성되는 로그들이나 GC로그를 통해 확인할 수 있다. Java 프로세스가 느려지거나 멈추는 현상은 대부분 메모리 부족으로 인한 gc/swap 으로 인한 것이기 때문에 리소스가 충분하다면 손쉽게 문제를 해결 할 수 있다. 하지만 log에 특별한 exception이 발생하지 않고, log.level을 DEBUG로 변경하였는데도 특별한 에러가 발견되지 않는다면 우리는 조금 더 복잡한 방법으로 문제를 확인해야 한다. 많은 접근 방식이 있겠지만 가장 쉽게 생각할 수 있고 많은 레퍼런스가 있는 JVM thread dump 와 JVM heap dump 방식을 보려고 한다. 1. JVM ..
1. 두 구문의 결과 값은? String x = "techbeamers"; String y = new String(new char[] { 't', 'e', 'c', 'h', 'b', 'e', 'a', 'm', 'e', 'r', 's' }); System.out.println(x == y); System.out.println(x.equals(y)); 1. x == y => false, x.equals(y) => true. 2. x == y => false, x.equals(y) => false. 3. x == y => true, x.equals(y) => true. 4. x == y => true, x.equals(y) => false. 5. None of these.> String 오브젝트의 '==' 연..
# Build? Compile? - 우선 빌드라는 용어가 익숙하지 않은 사람들을 위해 빌드와 컴파일이 무슨 차이가 있는지 알아보았다. 학교수업 또는 책에서 위와 같은 그림을 많이 봤을 것이라고 생각한다. C언어로 작성한 소스파일을 실행파일로 만드는 과정인데, 전처리Preprocessing - 컴파일Compile - 어셈블Assemble - 링킹Linking 이라고 한다. 위와 같이 보듯 전처리는 매크로 및 상수변수 등을 실제 값으로 변경하는 작업을 수행하며, 컴파일은 소스코드를 어셈블리 언어로 변경하는 작업을 수행하며, 어셈블러는 각 기계에 맞도록 기계어로 변경해 주는 작업을 한다. - 컴파일은 위와 같이 소스코드를 어셈블리 언어로 변경시켜주는 작업, 흔히들 소스코드에 문법적인 오류가 있는지 확인하는 행..