본문 바로가기

프로그래밍/JAVA

(20)
힙 덤프 명령 JVM PID 확인$ jps -v PID 힙 사용량$ jmap -heap PID PID 힙 덤프$ jmap -dump:format=b,file=file-name.hprof PID 분석 툴 : http://www.eclipse.org/mat/ 덤프 파일이 큰 경우 파싱 중 internal error 발생. java 기반 툴이라 실행시 힙(-Xmx)을 늘려준다.MemoryAnalyzer.ini (osx 의 경우는 패키지 내부 /Contents/Eclipse/MemoryAnalyzer.ini )
jni 관련~ native 메쏘드 작성 com.package.Myclass public class Myclass { public native static void myMethod(); };헤더 작성 : javah 빌드된 폴더로 이동. 이클립스의 경우 bin $ javah -jni -classpath ./classes -o ../jni/sample.h com.package.Myclass -jni : jni 스타일 헤더 생성 -classpath : 클래스 위치 -o : 출력 파일명 ( 디렉토리만 지정할 경우 -d ) 기본 데이터 타입 typedef unsigned char jboolean; /* unsigned 8 bits */ typedef signed char jbyte; /* signed 8 bits */ typed..
AES 암호화 키생성// 128, 196, 256 등 비트수에 맞게 패스워드 키 정의String keyString = "1234567890123456";SecretKeySpec key = new SecretKeySpec( keyString.getBytes(), "AES"); 운용모드 ( 상세한 설명은 요기로 : http://blog.kangwoo.kr/13 )ECB : 일정한 블록을 동일한 키로 암호화CBC : 이전 암호블록과 현재 블록을 XOR, 첫 블록은 이전블록이 없으므로 IV와 XOR.PCBC : 이전 원본 블록과 현재 블록을 XOR, 첫 블록은 CBC와 동일.CFB : IV를 암호화한뒤 원본 블록과 XOR하고, XOR된 블록이 다음 블록으로 전달.OFB : IV가 암호화되어 블록과 XOR하고, 암호화된 IV값..
[OSGi] 서비스 등록 및 해제 OSGi 이클립스 4.x 에서 기본 OSGi Framework 실행 오류.Run Configuration > OSGi Framework > Bundle 탭 TargetPlatform 을 모두 체크해제하고, 왼쪽의 Add Required Bundles , Validate Bundles 버튼 선택아래 타켓만 추가org.apache.felix.gogo.commandorg.apache.felix.gogo.runtimeorg.apache.felix.gogo.shell org.eclipse.osgiorg.eclipse.equinox.console 필요한 경우 Settings 탭에서 Clear the configuration area before launching 체크 후 실행 번들 컨텍스트Bundle bundle ..
[eclipse] eclipse 4 platform 이클립스 3.x 플랫폼에서는 org.eclipse.ui.views Extention Point를 정의하고, ViewPart를 상속받아 뷰를 구현했다. 뭐 이 구조도 크게 나쁠건 없는것 같은데, 이클립스에서는 이것저것 상속 대상이 많아지는게 비 효율적이라 생각했나 보다. 결국 이클립스가 4.x 플랫폼(이하 e4)으로 넘어가면서 구조가 바뀌었는데, Application model 이라는 녀석을 사용하기로 한 것이다. 더불어 Application 내부의 윈도우, 뷰등은 별도의 상속없이 xmi, DI, @annotation을 사용하게 되었다. (xml의 늪으로 빠져든다...-_-;;;) 기존 PDE 에서 e4 기반 프로젝트를 구성하기 위해서는 이것저것 만져줄 것이 많은데, 이러한 작업을 한 곳에서 도와주는 도구..
Annotation 1. Annotation 정의음 annotation도 일종의 클래스이다. 단지 메타 정보가 추가된다는 차이정도?이클립스 File>New>Annotation 을 선택한다.원하는 Annotation 명을 넣고 생성. 아주 심플하게 Annotation 이 생성되었다.public @interface MyAnnotation {} 위처럼 정의하고 필요한 곳에서 @MyAnnotationpublic void sampleFunction( ) {} 이렇게 사용하면 된다. 2. 조금더 세부적인 설정과 멤버변수 추가(META-ANNOTATION) @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface MyAnnotation {public in..
[swt] 이벤트 기본 swt.widgets 패키지 java.lang.Objectorg.eclipse.swt.widgets.Widgetorg.eclipse.swt.widgets.Controlorg.eclipse.swt.widgets.Scrollableorg.eclipse.swt.widgets.Compositeorg.eclipse.swt.widgets.Canvasorg.eclipse.swt.widgets.Decorationsorg.eclipse.swt.widgets.Shell 리스너 : org.eclipse.swt.events.TypedListener , org.eclipse.swt.widgets.Listener이벤트 : org.eclipse.swt.events.TypedEvent WidgetDisposeListener :..
[eclipse] Extention Points 플러그인은 플랫폼에 등록되어 지는데 이 정보는 plugin.xml에서 제공했었다. 이때 등록한 정보를 바탕으로 IExtensionRegistry -> IExtensionPoint 를 얻어와 실제 플러그인이 로드되는 구조이다. 따라서, Extension Point 정보가 플러그인의 각 동작을 수행하는 가장 중요한 요소가 된다. 플러그인이 로드되면 플러그인의 시작과 종료를 처리하고, 이러한 라이프사이클에 대해 BundleContex가 정보를 제공하게 된다. 크게 신경쓸 내용은 아닌데 간단히 살펴보면.. 플러그인 시작시 등록(Registration)과 초기화(Initialization)가 이루어지고, 이때 주어진 BundleContext 를 참조해 시작된 플러그인과 시스템의 플러그인의 정보를 얻게 된다. Bu..