Java

    JVM 메모리 구조 (JVM Memory structure)

    JVM 메모리 구조 (JVM Memory structure)

    JVM 메모리 구조 (JVM Memory structure) JAVA Source : 사용자가 작성한 JAVA 코드JAVA Compiler : JAVA 코드를 Byte Code로 변환시켜주는 기능Class Loader : Class파일을 메모리(Runtime Data Area)에 적재하는 기능Execution Engine : Byte Code를 실행 가능하게 해석해주는 기능Runtime Data Area : 프로그램을 수행하기 위해 OS에서 할당 받은 메모리 공간 Runtime Data AreaMethod AreaMethod Area, Class Area, Code Area, Static Area 로 불리어짐JVM이 읽어들인 클래스와 인터페이스 대한 런타임 상수 풀, 멤버 변수(필드), 클래스 변수(St..

    Java 자료구조 비교

    Java 자료구조 비교

    여러가지 자료구조에 대한 비교를 해본다. Array (배열)같은 데이터 타입에 대해 데이터를 한 곳에 저장해두고 하나의 변수를 가지고 사용하는 것을 말한다. 1차원배열과 다차원 배열이 존재장점간단하게 사용 가능인덱스 통해 빠르게 데이터 접근 가능단점저장 공간이 제한적동적 할당을 통해 새롭게 정의 가능하지만 데이터 이동을 또 해야함 Iterable이름 그대로 반복할 수 있는지 확인하는 인터페이스다음과 같은 abstract method를 갖음 boolean hasNext () // 요소가 더 많은 경우 true를 반환합니다. E next () // 제네릭 타입 E의 다음 원소를 반환합니다. void remove () // 반복자가 반환 한 마지막 요소를 제거합니다. Collection모든 콜렉션의 상위 인터..

    Java Network Framework, Netty

    혹시 Java로 TCP서버를 구축하고 계신가요?JAVA NIO를 공부하면서 서버 설계에 고민하고 계신가요? 서버 코어 설계 및 개발에 투자할 많은 시간 있다면? 그리고 안정성을 높이고 성능을 높이 끌어낼 자신과 시간이 있다면 직접 개발하세요. 하지만 그렇지 않다면 검증된 Java Network Framework인 Netty나 MINA를 사용해보세요. 이렇게 쓰니 제가 홍보하는 사람 같군요.하지만 저의 경험입니다. 서버 코어 부분을 설계하고 개발하다보면 프로젝트에서 너무 많은 시간을 할애하게 되어버립니다. 그 후에 안정성이나 성능에 대해서도 고민이 되고 제가 나가면서 다른 사람에게 인수인계 할 때의 유지보수도 문제가 되어 버립니다. 그런 면에서 Netty나 MINA를 추천합니다.사실 저도 어떻게 더 좋은지..

    JBoss 설치 및 연동

    1. JBoss 설치다양한 WAS중에서 나는 JBoss를 좋아한다. 회사에서는 주로 5버전을 쓰고 있었는데 최신 버전인 7 버전을 써보았다. 제일 좋은 점은 WAS 구동속도가 엄청나게 향상되었다. Download URL : http://www.jboss.org/projects * Admin 계정 생성jboss-as-7.1.1.Final\bin>add-user.bat * Server 시작jboss-as-7.1.1.Final\bin>standalone.bat$JBOSS_HOME/bin/standalone.sh 2. JBoss 환경변수 설정linux) export JBOSS_HOME=/home/atin84/work/jboss-as-7.1.1.Finalwin) 환경변수 JBOSS_HOME 추가 3. JBoss ..

    Java와 C#(또는 C, C++) 통신에서 엔디안과 인코딩 처리

    C, C++, C#과 Java와 통신을 하려면 몇 가지 유의사항이 있다. 정수 타입에 대한 엔디안 처리와 인코딩을 유의해야 한다. 영문, 숫자 문자열를 주고 받을 때는 별 문제가 없지만 당연히 한글을 주고 받게 될 경우에는 utf-8이나 euc-kr로 변환을 해주어야 한다. 그리고 엔디안 처리를 유의해야 한다. C, C++, C#에서는 리틀 엔디안을 쓰지만, 자바에서는 빅 엔디안을 사용한다. C#쪽에서 빅 엔디안으로 바꿔주거나, 자바에서 리틀 엔디안으로 바꿔주면 되는데 나는 자바에서 바꾸는 쪽이 좋다고 본다. Java에서 리틀 엔디안 빅 엔디안 처리 public class Endian{ public static byte[] getLittleEndian(int v){ byte[] buf = new byte..

    JSON 에러 - Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException

    JSON-LIB를 가져다 쓰는데 다음과 같은 예외가 발생하였다. Exception 내용 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException 황당했다. 내가 JSON 문법을 잘못 쓴지 알고 찾다가 뭔가 이상해짐을 알고 json-lib 공식 홈페이지에 있는 예제를 실행해보았다. 똑같은 예외가 발생하였다. 하하하하. 가만보니 예외 내용이 NoClassDefFoundError이다. 클래스를 왜 찾을 수 없을까? 설마 json-lib가 문제있는 라이브러리를 배포했을까? 그건 아니지만 json-lib 내부에서는 다른 라이브러리를 사용하고 있다. 그래서 jso..

    Java에서 JNI를 써서 핑 프로그램을 구현하는 이유

    자바로 된 핑 프로그램에 대해 분석하다가 이상한 점을 발견했다. JNI를 이용해서 핑 프로그램을 구현한 것이다. 웹에서 찾다보면 자바로 구현한 소스도 있는데, 왜 굳이 JNI를 썼을까 알 수가 없었는데 책을 찾아보다가 그 이유를 알게 되었다. 핑 프로그램은 ICMP(Internet Control Message Protocol)을 사용하는데, ICMP 패킷은 SOCK_RAW형식의 소켓만을 지원한다. 이런 이유로 자바에서는 제대로 된 핑 프로그램을 구현할 수 없다. 결국 대부분의 자바 네트워크 책에서 소개되는 핑 프로그램은 핑 프로그램을 흉내를 내는것 뿐이다. SOCK_RAW의 경우는 좀 더 높은 수준의 제어를 하고 싶은 사용자를 위한 것으로, 패킷(Packet)을 전달할 때 패킷이 지나갈 경로까지도 지정할..

    Java 로그 기록 라이브러리 - Log4j

    기존에 Java 로그를 남기면서 때로는 그냥 남기기도, log4j를 사용하기도, 직접 로그 클래스를 만들어서 활용하기도 했는데 log4j가 제일 좋은 것 같고, 기술서나 전문가들이 모두 log4j를 추천한다. 오픈 소스 프로젝트로서 알고 있던 것보다 그 내부 기능이 어마어마하다. * 라이브러리 및 설정파일 라이브러리는 자바 프로젝트의 라이브러리 경로에, log4j.properties는 소스위치에 있으면 컴파일 및 실행시 클래스 파일에도 복사되어 실행된다. Reference [1] log4j (http://logging.apache.org/log4j/1.2/download.html) [2] log4j download (http://logging.apache.org/log4j/1.2/download.html..

    싱글톤 패턴(Singleton Pattern)

    자바 개발을 하면서 제일 많이 쓰는 패턴 중 하나가 싱글톤 패턴이다. 그리고 싱글톤 소스 또한 다양하게 작성한다. Source2와 같은 경우는 다중 쓰레드 상에서 위험하다. Source3과 같은 경우는 안전하긴 하지만 성능상 Source1이 제일 좋다. Source4와 같은 경우는 싱글톤에서 직렬화 처리를 해주기 위한 방법이다. Serializable 을 구현해주고 readResolve메소드를 구현하고 모든 인스턴스 필드를 transient 로 선언해준다. Source5와 같은 경우는 enum을 통한 구현 방법이다. 직렬화가 자동으로 지원되고 인스턴스가 여러개 생기지 않도록 지원해준다. public class Singleton { private static final Singleton instance =..

    Builder Pattern

    이건 Effctive Java[1]에서 "항목 2. 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자"를 공부하고 작성하였습니다. 객체를 생성할 때, 텔리스코핑 생성자 패턴과 자비빈즈 패턴은 자주 사용하지만 빌더 패턴은 처음 알게 되었네요. 이런 형태로 객체 생성을 설계할 수 있구나하고 배우게 되었습니다. 텔리스코핑 생성자 패턴(Telescoping constructor) 필수 매개변수들만 갖는 생성자, 필수 매개변수들만 선택 매개변수 하나를 갖는 생성자, 필수 매개변수들과 선택 매개변수 두개를 갖는 생성자 등의 형태로 모든 매개변수를 생성자가 가질 수 있도록 여러 개의 생성자를 만드는 것 -단점 매개변수들의 수가 증가하면 무척 번거로워진다. 자바빈즈 패턴(JavaBeans Pattern) ..