개요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 이라고 한다. 위와 같이 보듯 전처리는 매크로 및 상수변수 등을 실제 값으로 변경하는 작업을 수행하며, 컴파일은 소스코드를 어셈블리 언어로 변경하는 작업을 수행하며, 어셈블러는 각 기계에 맞도록 기계어로 변경해 주는 작업을 한다. - 컴파일은 위와 같이 소스코드를 어셈블리 언어로 변경시켜주는 작업, 흔히들 소스코드에 문법적인 오류가 있는지 확인하는 행..
빅데이터 분석에서 가장 기본예제로 많이 다루어지고, 많이 쓰이는 WordCount.java 라는 예제가 있다. 현업에서의 데이터는 더욱 복잡하고 고려사하이 많아, 주어진 코드와 동일하게 작성되지는 않을지도 모르겠다. 하지만 기본적인 MapReduce의 구성을 분석하는 것은 꼭 필요한 것이라고 생각한다. 소스코드가 조금은 길 수도 있고 쌩뚱맞은 부분들(import가 중간에 나오는 것과 같이)도 있지만, 이것은 소스의 흐름에 따라 이해를 돕기 위함이다.