본문 바로가기
반응형

java37

jmap 사용시 InvocationTargetException, Supported versions are 24.201-b00. Target VM is 25.131-b11 jmap을 이용해 자바 애플리케이션 힙 메모리 분석을 하다가 다음과 같은 예외(Exception)를 만나게 되었다. $ jmap 1234 Attaching to process ID 1234, please wait... Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Delegating.. 2019. 4. 5.
[Java(자바)] ThreadLocal 사용법 설명과 예제 자바를 비롯한 다양한 언어에서 멀티 쓰레드 프로그래밍을 지원한다. 소스코드의 다양한 부분을 멀티 쓰레드로 수행하면 많은 장점들을 얻을 수 있다. 하지만 멀티 쓰레드 프로그램을 작성할 때 가장 고민해야 하는 부분이 있으니 바로 공유 리소스로의 접근제어다. 그 중에 특정 변수 값을 세팅하고 읽는 과정을 동기화해야 하는 경우를 가장 많이 만나게 된다. synchronized 키워드를 이용하여 특정 메소드 혹은 코드 블록을 동기화 시키는 방법은 잘 알고 있을 것이다. Synchronized 키워드와 더불어 자바에서 제공하는 멀티 쓰레드를 위한 도구로 ThreadLocal이 있다. ThreadLocal은 각 쓰레드가 자신만의 전역변수를 만들어 사용할 수 있는 기능을 제공해준다. 우선 코드를 살펴보자. 이 코드를 .. 2019. 1. 27.
[Java(자바)] Deque(덱/데크) 자료구조 카프카의 소스코드를 보던 중 내부에서 Deque 클래스를 사용한 부분을 보게 되었다. Deque(덱 혹은 데크)은 Double-Ended Queue의 줄임말로 큐의 양쪽으로 엘리먼트의 삽입과 삭제를 수행할 수 있는 자료구조를 의미한다. 덱(Deque)은 어떤 쪽으로 입력하고 어떤 쪽으로 출력하느냐에 따라서 스택(Stack)으로 사용할 수도 있고, 큐(Queue)로도 사용할 수 있다. 특히 한쪽으로만 입력 가능하도록 설정한 덱을 스크롤(scroll)이라고 하며, 한쪽으로만 출력 가능하도록 설정한 덱을 셸프(shelf)라고 한다. Java에서의 Deque 자바에서의 덱은 인터페이스로 구현되었다. 덱 자료구조의 여러 연산들을 정의한 Deque 인터페이스가 있고 이를 구현한 ArrayDeque, LinkedBl.. 2019. 1. 23.
Exception in thread "main" java.lang.IllegalAccessException: 하둡(Hadoop) 관련 프로그램을 작성하다가 다음과 같은에러를 만나게 되었다. Exception in thread "main" java.lang.IllegalAccessException: Class org.apache.hadoop.util.RunJar can not access a member of class TestClass with modifiers "public static" at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:110) at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:262) at java.lang.reflect.Accessib.. 2019. 1. 20.
[Java(자바)] Java Unsupported major.minor version 52.0 에러 Java로 프로그램을 작성해서 다른 플랫폼으로 배포하는 경우 자주 발생하는 에러로 Java Unsupported major.minor version 52.0 에러가 있다. 톰 캣(Tomcat)이나 하둡 맵리듀스(MapReduce) 처럼 Java 프로그램을 작성하고 Jar 파일로 묶어서 전송후 실행하는 경우에 간혹 볼 수 있는 에러다. 요약하면 Java 버전이 맞지 않아서 생기는 문제다. Jar 파일을 생성한 빌드 환경에서의 JDK 버전이 실제 실행하는 환경에서의 JDK 버전보다 높아서 생기는 문제다. Java SE 8 (JDK 1.8)에서 빌드한 Jar 파일을 Java SE 7 (JDK 1.7)이 설치되어 있는 환경에서 실행하려고 하면 위와 같은 문제가 발생한다. 대체로 개발환경은 최신으로 맞춰서 개발하.. 2019. 1. 19.
[Java(자바)] SimpleDateFormat 사용법, 멀티쓰레드 환경에서의 예제 Java를 이용해서 프로그래밍을 하다보면 날짜 데이터를 다뤄야 할 때가 많다. 날짜를 쉽게 파싱하고 다루기 위해 SimpleDateFormat 클래스를 많이 사용한다. 이번 포스트에서는 SimpleDateFormat 클래스의 사용 예제와 멀티쓰레드에서 고려해야 할 사항에 대해서 다뤄보겠다. SimpleDateFormat은 java.text.DataFormat 이라는 abstract 클래스를 상속받은 concrete 클래스다. 이름에서 알 수 있듯이 간단하게(Simple) 날짜 포맷을 다룰 수 있는 메소드를 제공한다. SimpleDateFormat 간단한 예제 (문자열 to Date 객체) 간단한 예제를 살펴보자. 이 코드를 실행하면 다음 결과를 얻을 수 있다. 1572534000000 코드를 살펴보면 ".. 2019. 1. 16.
[Java(자바)] json-simple (JSONObject, JSONArray, JSONParser)을 이용한 JSON 객체 다루기 예제 네트워크를 통해 데이터를 주고 받을 때 사람이 읽고 해석하기 쉬운 JSON 포맷을 많이 사용한다. 문자열의 형태로 데이터를 표현하는 JSON을 사용하기 위해 매 프로젝트마다 JSON 파싱과 Serialize 메소드를 매번 구현하는건 좀 귀찮다. Java를 사용하는 사용자라면 json-simple 이라는 라이브러리를 사용해 봤을 것이다. json-simple 라이브러리 세팅 json-simple 라이브러리를 사용하기 위해서는 jar 파일이 필요하다. 메이븐(Maven)을 사용하는 유저라면 다음과 같은 Dependencies를 추가하면 쉽게 사용할 수 있다. 1 2 3 4 5 6 com.googlecode.json-simple json-simple 1.1.1 Colored by Color Scripter c.. 2019. 1. 15.
[Java(자바)] OkHttp Connection Pooling 기능 OkHttp 라이브러리는 "Connection Pooling" 기능을 제공한다. Connection Pooling 기능을 이용하면 동일한 URL로의 커넥션을 풀링하여 다음번 요청때 재사용하게 된다. 커넥션을 새로 맺는 동작은 짧지만 무시할 수 없는 오버헤드가 될 수 있다. OkHttp를 사용할 때 OkHttpClient 객체를 생성했다. OkHttpClient client = new OkHttpClient(); OkHttpClient() 생성자의 내부를 따라가다보면 ConnectionPool() 이라는 객체를 만나게된다. 123public ConnectionPool() { this(5, 5L, TimeUnit.MINUTES);}cs 이 Client 객체를 사용하여 여러 REST API에 요청을 보내면 5.. 2019. 1. 14.
[Java(자바)] synchronized keyword 와 final 필드(field) 멀티 스레드 프로그램에서 여러 쓰레드(Thread)가 동시에 하나의 자원에 접근할 수 있다. 여러 쓰레드가 동시에 공유 자원에 대한 수정을 할 경우 동시성 문제가 발생할 수 있다. 자바(Java)에서는 다행히 synchronized 라는 키워드를 제공하여 별도의 라이브러리를 사용하지 않고도 손쉽게 멀티 쓰레드 환경에서의 동시성 제어를 구현할 수 있다. synchronized 키워드를 사용할 때 변수를 명시하여 해당 변수에 접근하는 쓰레드를 줄 세울 수 있다. 예를 들어 다음과 같은 코드를 보면, synchronized 키워드와 함께 레퍼런스(Reference;참조) 변수를 넘겨줬다. 두 개의 쓰레드가 같은 코드를 수행할 때, 이 레퍼런스 변수를 기준으로 줄서게 된다. 이 코드를 실행하면 다음과 같은 결과.. 2019. 1. 4.
반응형