일반적인 프로그램의 실행구조를 살펴보면 OS에 직접적인 영향을 받는다.



[일반적인 프로그램]



Java 프로그램의 실행구조를 살펴보면 OS위에 JVM (java virtual machine) 으로 실행하게 되며


JVM은 자바 바이트코드 를 실행할 수 있는 주체로


이론적으로 모든 Java 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장한다.



 

[Java 프로그램의 실행구조]



Java는 운영체제(OS)에 독립적이지만 JVM은 운영체제(OS)에 의존적이다.


[운영체제(OS)에 독립적인 Java]


자바 컴파일러는 JVM이 인지 할 수 있는 자바 바이트코드 를 생성한다.



[자바 바이트코드 생성]



< Temporary Table >


하나의 세션 동안이나 트랜젝션(Commit 하기 전) 동안 임시적으로 데이터를 보관하기 위해 제공된다. (세션이나 트랜젝션이 종료되면 테이블의 데이터는 Truncate 된다.

일반테이블과 다르게 테이블의 레이아웃은 dictionary에 존재하지만 데이터는 디스크 상에 존재하지 않고

메모리상에서 [INSERT] [UPDATE] [DELETE] [SELECT] 하는 테이블이다.


1. TEMPORARY TABLE 생성


CREATE GLOBAL TEMPORARY TABLE [테이블명]

      ON COMMIT [DELETE|PRESERVE] ROWS ;

ON COMMIT PRESERVE ROWS : 세션별로 데이터가 존재 (세션이 종료시 데이터 소실)

ON COMMIT DELETE ROWS    : 트랜젝션별로 데이터 존재  (Commit 하면 데이터 소실)


2. 예제


-- Session-Level Temporary

CREATE GLOBAL TEMPORARY TABLE TBL1

(

    ID       NUMBER

,   NM      VARCHAR2(10)

,   DT      DATE

)     ON COMMIT PRESERVE ROWS ;


-- Transaction-Level Temporary

CREATE GLOBAL TEMPORARY TABLE TBL2

(

    ID        NUMBER

,   NM       VARCHAR2(10)

,   DT       DATE

)      ON COMMIT DELETE ROWS ;


SQL>

SELECT TABLE_NAME

     , DURATION

  FROM USER_TABLES

 WHERE TEMPORARY   = 'Y'

   AND TABLE_NAME IN ('TBL1', 'TBL2') ;

TABLE_NAME | DURATION

------------------------------

TBL1       | SYS$SESSION

TBL2       | SYS$TRANSACTION

SYS$SESSION        : 세션이 종료되면 데이터 소실

SYS$TRANSACTION : 트랜젝션이 종료되면 데이터 소실


-- 하나의 임시 테이블은 더로 다른 사용자가 접근이 가능하다. 하지만 데이터는 서로 다르다.

-- 자신의 SID를 조회

SQL> SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1 ;

       SID

----------

       962


-- 데이터 INSERT

SQL> INSERT INTO TBL1(ID, NM, DT) VALUES(1, '홍길동', SYSDATE) ;


-- 데이터 SELECT (이때 다른 세션에서 조회하면 데이터가 존재하지 않는다.)

SQL> SELECT * FROM TBL1 ;

ID  | NM       | SYSDATE

-------------------------------------

1   | 홍길동   | 2015/09/25 10:52:04


-- 트랜젝션으로 설정한 경우 Commit시 데이터가 사라짐

-- 다른 사용자가 접속한 경우도 데이터는 보이지 않는다.

SQL> COMMIT ;


-- 세션으로 설정한 경우 Exit하는 경우 데이터가 사라짐

-- 다른 세션으로 접속한 경우도 데이터는 보이지 않는다.

SQL> EXIT


==> TEMP TABLE도 일반 TABLE처럼 Insert or Update  할 때 Lock잡는다. Lock조회하면 조회된다


* 중요

 테이블의 Definition 은 Dictionary 에 저장된다.

 하지만 SELECT TABLESPACE_NAME FROM DBA_TABLES ; 를 조회해 보면 조회되지 않는다.

 테이블의 정보는 Dictionary (owner의 DEFAULT_TABLESPACE)에 저장되지만 실 데이터는 디스크에 저장되지 않고 메모리상에서 소멸되기 때문이다.


3. TEMPORARY TABLE 삭제


DROP TABLE T1 ;

DROP TABLE T2 ;



 원본

 수정

 설명

  -vmargs

  -vmargs

 

  -Dosgi.requiredJavaVersion=1.5

  -Dosgi.requiredJavaVersion=1.5

 

 

  -Xverify:none

 클래스 검사 생략. 이클립스 실행 시간이 줄어든다.

 

  -XX:+UseParallelGC

 Parallel Collector를 사용. 병렬 가비지 컬렉션.

 

  -XX:-UseConcMarkSweepGC

 병행 mark-sweepGC 기능을 수행하여 GUI 응답 속도 처리

 

  -XX:PermSize=32M

 이클립스 클래스 로딩 기본 메모리

 

  -XX:MaxPermSize=128M

 이클립스 클래스 로딩 최대 메모리

   -XX:NewSize=32M JVM에서 새로운 객체가 생성 될때 로딩되는 최소 영역

 

  -XX:MaxNewSize=32M

 JVM에서 새로운 객체가 생성 될때 로딩되는 최대 영역

  -Xms256m

  -Xms256m

 이클립스 실행시 잡는 최소 메모리

  -Xmx256m

  -Xmx256m

 이클립스 실행시 잡는 최대 메모리


* Xms와 Xmx를 똑같이 설정한 이유는 이클립스가 메모리를 유동적으로 관리하는데 이걸 정적으로 고정시켜 주기 위해서이다.

 유동적으로 관리하게 놔두면 자바는 메모리가 부족할때 확보하려고 메모리 할당을 하게 되고 메모리의 여유가 있으면 남는 메모리를 조금씩 시스템으로 돌려버린다.

 이러한 작업때문에 이클립스 속도가 더 느려지기에 아예 처음부터 최소값과 최대값을 고정시켜 버리면 불필요한 작업을 하지 않게 된다.

 물론 메모리 값은 컴퓨터 사양에 따라 수정하면 된다.


* Heap Memory


[Window] -> [Perference] -> [General]  에서 'Show heap status' 체크박스에 체크.



체크를 해주면 이클립스 오른쪽 하단에 현재 메모리 사용량과 휴지통 아이콘이 생긴다.
힙에 메모리가 많이 쌓였을때 휴지통을 눌러서 한번씩 정리해주면 된다.



Code Assist 비활성화

[Window] -> [Preferences] -> [Java] -> [Editor] -> [Code Assist tab] 에서 'Enable auto activation' 을 꺼준다.

단축키 ctrl + space 로 코드 어시스트 사용가능하다.




'Tools > Eclipse' 카테고리의 다른 글

이클립스 단축키  (0) 2015.10.16
이클립스 설치 및 한글버전 설정  (0) 2015.10.13
탭을 공백문자로 바꾸어주도록 설정  (0) 2015.09.23

+ Recent posts