2016년 7월 7일 목요일

JVM 옵션 설명

Java JVM

자바 옵션 (JDK 6) 기준 
공식 사이트 설명 

SYNOPSIS
 java [options] class [ argument ... ]
 java [options] -jar file.jar [ argument ... ]
[window only]
 javaw [options] class [ argument ... ]
 javaw [options] -jar file.jar [ argument ... ]

options - command-line options
class - 호출되는 클래스 이름
file.jar

옵션에는 두가지 유형이 존재 한다.
1) standard options  - 현재 실행환경에 제공되면 향후에는 제공되어짐.
2) non-standard options - 향후 release 변경될 수잇는 option

Standard Options
-client
    Java HotSpot Client VM (기본선택값) , 조건에 따라 Server VM으로 변경 있다.
-server
   서버 VM 선택 한다.
-agentlib:libname[=options]
   Load natvie agent library libname, e.g.
   -agentlib:hprof
   -agentlib:jdwp=help
   -agentlib:hprof=help
   좀더 상세정보 JVMTI Agent Command Line Options.
   ~~ 좀더 상세 공부 필요할것 같다. 대충은 JNI 관련될것 같다...~~
-agentlib:pathname[=options]
   Load a native agent library by full pathname, 좀더 상세정보는 JVMTI Agent Command Line Options.  참고 하세요.

-classpath classpath
-cp classpath ^^ 후니 생삭 cp classpath 약어 이다.
  클래스 파일들을 찾기위한 디렉토리 , JAR 파일들 , ZIP 파일의 목록을 적어 있다.
  구분자 (;) 이다. CLASSPATH 환경변수 정보를 대처 한다. 
  만약 좀더 상세한 정보를 원한다면 Setting the Class Path
-D property=value
  구동시 시스템 속성 정보를 설정 있다면 만약 값에 빈문자열이 존재하면 double quotes enclose 한다.
 예) java -Dfoo="L E E"
 여기서 속성명은 foo 이며 값은 L^E^E 입니다.
-showversion
   VM 버젼 정보를 보여주고 진행 계속 진행 한다. (version 차이점)
-version : 버젼 정보를 보여준다.
-X : 비표준 옵션 정보를 출력하고 종료 합니다.


java - the Java application launcher
HotSpot 대한 설명

조건은 여러가지에 따라 틀리다. 관련 URL : http://download.oracle.com/javase/6/docs/technotes/guides/vm/server-class.html

2016년 6월 15일 수요일

JDK 1.4 튜토리얼 - 1장(1/2)

CHAPTER 1 . 기본 NIO(New Input/Output) (1/2)

NIO의 특징

  • 저 레벨 I/O에 대한 새로운 모델을 제공
  • 블록 단위의 데이터 입.출력 (버퍼 사용) 즉 한꺼번에 많은 양을 처리할 수 있음
  • Direct Buffer 사용
    • 다이렉트 버퍼의 개념 - JVM를 통하지 않고 시스템 레벨에서 직접 수행
  • 넌 블록킹 I/O 형태의 플랫폼 독립성을 제공
  • 다중 쓰레드 프로그램밍을 간략화 시킬 수 있음
  • 기본 I/O API는 내부적으로 NIO로 재 작성됨

채널과 버퍼

  • 채널 : I/O 스트림에 해당
    • 읽고 쓸 때 버퍼를 사용
    • 양방향성을 지원(입력/출력)
    • 관련 메소드 getChannel()
  • 순수 자바 스트림에는 채널을 지원하지 않음
    • ByteArrayOutputStream , FilterInputStream
    • InputStream, OutputStream 채널 지원 하지 않음, 즉 일반적이지 않음
  • 채널에 읽기와 쓰기
    • public int read(ByteBuffer dst);
      • 채널 --> 버퍼
    • public void write(ByteBuffer src);
      • 버퍼 --> 채널


Buffer에 대해서

  • 생성하기
    • allocate() : 메모리를 할당
      • allocateDirect() : 직접 메모리 할당
    • wrap() : 배열로 부터 생성하고 배열와 동기화 한다.
  • get() 과 put()
    • 두 메소드 구분에는 상대적인 과 절대적인 있고 구분 기준은 Index 임
      • Index를 있으면 절대적
    • put()
      • 소스 -> 버퍼 : 버퍼에 넣기
    • get()
      • 버퍼 --> 목적 : 버퍼에서 얻기
  • 버퍼 상태 값
    • position : 작업할 인텍스 값
    • limit : 실제 크기
    • capacity : 전체 크기
    • remaining() : limit - position
  • 상태 변경 메소드
    • flip() : 읽기에서 쓰기로 변경
    • clear() : 초기화 하기
  • ByteBuffer의 디폴트 바이트 순서는 Big-Endian 임
    • order(ByteOrder) 으로 변경 가능 함
    • ByteOrder.nativeOrder() : 플랫폼의 바이트 order를 찾을 수 있음

Direct buffer

  • 일반 버퍼보다 빠르다


기본 예제
package ns.jdk14;

import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class NIOBufferTest {

  public static void main(String[] args) throws IOException{
      //읽기 채널
      FileChannel ifc =
              new FileInputStream("test/hi.txt").getChannel();
      //쓰기 채널
      FileChannel ofc =
              new FileOutputStream("test/out.txt").getChannel();

      ByteBuffer bbf = ByteBuffer.allocate(1024);

      while(true) {
          int ret = ifc.read(bbf);
          if (ret == -1) break;  //읽기 완료됨

          bbf.flip();     //이것은 반드시 해야 함
          ofc.write(bbf);
          //bbf.clear(); //안해도 그만 이것은 하지 않으면 프로세스 종료 되질 않네요
          //만약 위 clear() 호출하지 않는 대신에 아래 메소드를 호출 하면된다. 2개를
          bbf.limit(bbf.capacity());
          bbf.position(0);
      }
  }
}
채널과 버퍼를 이용한 IO 수행 특징

  • 스트림 기반 방식은 편리함과 유연성을 제공
  • 채널과 버퍼 방식은 Bulk 테이터(Buffer)를 취급 하여 빠른 속도 측면을 제공
    즉 OS 레벨의 IO 속도 성능을 가질 수 있게 됨

출처 : 인포북 JDK 1.4 Tutorial

2016년 6월 14일 화요일

C언어 포인터 - 1장 요약

C 언어 포인터 - 1장



책 요약 정리

책 C언어 포인터에 대해서 각 장별로 정리 해서 올릴 예정 이다.
아래 코드에 대한 의미 설명 즉 포맷터 설명
printf("%#010x",pt);
  • # : 주소를 표현
  • 0 : 나머지 영역을 0으로 채움
  • 10 : 전체 10자리 차지 함
  • x : 16진수로 표시 함
  • x : 16진수
  • o : 8진수

포인터란

메모리 번지에 대한 기호화된 표현 너무 상투적인 정의, 간단히 말해서 메모리 번지 가르키는 것

포인터 변수

포인터를 저장하는 변수
*주의 사항 : 번지 다른것은 절대 안됨

포인터 변수 정의

int *intp;
아래코드는 어떻게 결과가 나올까
main()
{
 int *intp;
 printf("%p\n",intp);
 printf("%p\n",&intp);
}
//실행 결과
(nil)
0x7fffea948838