본문 바로가기

Programming

System 환경 읽어 오기 System 환경 읽어 오기 Java.lang.System 클래스는 다음과 같은 시스템의 환경에 관한 정보를 제공 합니다. java.version: Java Runtime Environment 의 버젼 java.vendor: Java Runtime Environment 의 벤더 java.vendor.url: Java 벤더의 URL java.home: Java 의 인스톨처 디렉토리 java.vm.specification.version: Java 가상 머신의 사양 버젼 java.vm.specification.vendor: Java 가상 머신의 사양 벤더 java.vm.specification.name: Java 가상 머신의 사양명 java.vm.version: Java 가상 머신의 구현 버젼 java.vm... 더보기
Garbage Collector 호출하기 Garbage Collector 호출하기 C++과는 다르게 자바에서 new 연산자를 통해 객체를 생성한 후 특별히 객체를 삭제하는 키워(C++의 delete)는 없습니다. 그 이유는 JVM이 더 이상 사용되지 않는 객체를 자동으로 메모리에서 삭제하는데 이렇게 사용되지 않는 객체를 처리하는 것이 Garbage Collector 입니다. 자바언어의 강점이기도 합니다. 한편 프로그래머가 명시적으로 이 Garbage Collector를 호출 할 수 있는데 System.gc()를 이용 합니다. 아래의 예문을 참고 하세요~ public class CallGarbageColletor { public static void main(String[] args) { byte[] test = new byte[4096]; Ru.. 더보기
OutOfMemory 해결법 OutOfMemory 해결 법 OutOfMemory 오류는 Exception이 아니라 Error 이기에 try ~ catch로 잡히지 않는 시스템 오류 입니다. 이 경우엔 아래처럼 JVM의 Heap 크기를 조절 해야 합니다. Java –Xms64m –Xmx128m classname -Xms : 최소 힙 크기 -Xmx : 최대 힙 크기 더보기
윈도우 레지스트리 내용 다루기 자바에서 윈도우 레지스트리 내용 읽어 오기 자바 프로그램을 이용하여 윈도우 시스템의 레지스트리를 다루거나 어떤 프로그램을 윈도우의 서비스에 등록 또는 해제 하는 기능 등을 구현 할 수 있습니다. 이러한 것이 가능 하기 위해서는 관련 Library를 다운 받아 JNI를 이용하면 가능 한데 다음과 같이 하시면 됩니다. 우선 http://sourceforge.net/project/showfiles.php?group_id=70882&release_id=133472 에서 jst1.2.zip 파일을 다운 받아 압축을 해제 하면 jst.dll 과 jst.jar 파일이 나옵니다. 각 파일이 하는 일은 dll인 경우 윈도우 레지스트리를 직접 핸들링 하는 JNI를 위한 구현부가 들어 있으며, jar 파일인 경우 그 DLL.. 더보기
JBuilder에서 CVS 소스버전 콘트롤 JBuilder에서 CVS를 이용한 소스코드 버전 컨트롤 6. JBuilder에서 CVS를 이용한 소스코드 버전 컨트롤 이미 앞의 과정에서 CVS Server 설치 과정을 거쳤으므로, Jbuilder에서 CVS Server를 사용하는 방법에 대해 알아보도록 하자. (참고로 필자는 JBuilder 9를 사용했다.) JBuilder 실행 후 [Menu -> Team -> Select Project VCS]를 실행 시킨다. 소스 코드를 CVS Server로 올리는 작업, 즉 업로드 하는 작업을 Commit이라고 한다. 위의 그림과 같이 JBuilder는 ‘ClearCase’, ‘CVS’, ‘StarTeam’, ‘Visual SourceSafe’ 4가지를 지원한다. 이중 우리가 사용할 것은 CVS이므로 CVS를.. 더보기
Sort 알고리즘(삽입정렬) 데이터 개수가 적거나 반정도 정렬된 상태나 정렬된 상태에서는 수행속도 양호, 그러나 역순인 경우에는 선택 정렬보다 떨어진다. 자료의 개수 N이 2배 증가하면 소요시간은 대략 2의제곱배씩 증가한다.(정렬알고리즘이 이중루프) 삽입정렬은 자료 상태에 따라 수행속도가 민감하게 차이가 난다. 정렬된 상태가 최선의 상태이며 역순상태가 최악의 상태이다. 이경우 비교 및 이동횟수는 1+2+3+…+n-1로서 n(n-1)/2이다. 최선의 상태에서는 이동은 한번도 일어나지 않으며 비교만 n(n-1)/2번 일어난다. (n이 5이면 비교는 1+2+3+4번 일어난다.) 평균 연산 시간은 O(n2) 아래의 예제를 참조하자... ----------------------------------------- 링크드리스트를 이용한 방법 -.. 더보기
Sort 알고리즘(버블정렬) 버블정렬(Bubble Sort) 이란 인접한 레코드의 키값을 비교하여 순서화 되어 있지 않으면 교환 하는것 오름차순 정렬의 경우 첫번째 키와 두 번째 키를 비교하여 두번째 자료가 첫번째 자료보다 작으면 이를 맞 교환, 결국 이를 반복하면 리스트의 마지막엔 가장 큰 키를 갖는 데이터가 들어 있게 된다. 평균 연산 시간은 O(n2) import java.util.Random; class BubbleSort { //버블정렬1(좌측부터) int[] sort1(int a[]) { int temp, num = a.length;; boolean flag=true; while(flag) { flag = false; //i를 미리 증가, 처음것 다음부터 비교 for(int i=0; i < num-1; ++i) { if(.. 더보기
Sort 알고리즘(셸정렬) 셸정렬(Shell Sort) 이란 버블정렬의 경우 데이터가 제 위치에서 멀리 떨어져 있으면 여러 번 교환이 필요하게 된다.이것이 버블정렬의 취약점으로서 인접한 데이터만 비교하기 때문에 발생하게 된다. 이러한 문제를 해결하기 위해 멀리 있는 레코드들 끼리도 비교가 가능하게 효율을 높인 정렬 방법이 고안자인 셸(Donald L.Shell)의 이름을 딴 셸 정렬 이다. 원리는 주어진 입력 리스트를 적당한 매개변수의 값만큼 서로 떨어진 레코드들과 비교하여 교환하는 과정을 매개변수 값을 바꾸어 가면서 되풀이 하는 것이다.(매개변수의 값은 줄어들면서 1이되면 종료한다.)이때 떨어져 있는 레코드들은 하나의 부분리스트를 구성하여 보통 다른방법(삽입정렬)에 의해 개별적으로 정렬된다 O(log n) 수행시간이 O(n2)보.. 더보기
Sort 알고리즘(퀵정렬-재귀호출이용) 퀵 정렬(Quick Sort) 이란 주어진 입력리스트를 특정한 키(Control Key, Pivot)로 분리하여 왼쪽에는 키 값보다 작은 값, 우측에는 키 값보다 큰 값을 갖는 서브 리스트로 분리한다. 그런 다음 각각의 서브리스트에서도 같은 방법을 반복적으로 수행하여 정렬하는 방법이다. 다음의 예제를 보자... import java.util.Random; class QuickSort3{ //퀵 정렬(재귀방법) int[] qsort(int a[]) { //low와 high 값을 parameter로 던지자. quicksort(0, a.length-1, a); return a; } void quicksort(int low, int high, int[] a) { if (low < high){ //서브리스트로 분.. 더보기
Sort 알고리즘(합병정렬-Merge Sort) import java.util.Random; class MergeSort2 { //Recursion을 이용한 Merge Sort public static int[] mergesort(int a[ ], int first, int n) { int n1; int n2; if (n > 1) { n1 = n/2; n2=n-n1; mergesort(a, first, n1); mergesort(a, first+n1, n2); merge(a, first, n1, n2); } return a; } private static void merge(int[ ] a, int first, int n1, int n2) { int[ ] temp = new int[n1+n2]; int copied = 0; int copied1 = 0.. 더보기