@@ -539,16 +539,11 @@ NIO의 채널은 무조건 버퍼에 데이터를 보관해야 하기 때문에
539539<br />
540540
541541#### 메모리 공간, 버퍼 생성 시간
542- 다이렉트 버퍼는 운영체제의 메모리를 할당 받기 위해 운영체제의 네이티브 함수를 호출해야 하고 그 외 여러 처리를 해야 하기 때문에 속도가 느린 편
543-
544- 따라서, 한 번만 생성하여 ** 재사용** 하는 것이 효율적
545-
546- <br />
542+ 다이렉트 버퍼는 운영체제의 메모리를 할당 받기 위해 운영체제의 네이티브 함수를 호출해야 하고 그 외 여러 처리를 해야 하기 때문에 속도가 느린 편. ** 한 번만 생성하여 재사용 하는 것이 효율적**
547543
548544#### 버퍼 크기
549545넌다이렉트 버퍼는 JVM의 제한된 메모리를 사용하기 때문에 작은 크기의 버퍼만 생성 가능. 초과 시 ``` OutOfMemoryError ``` 발생
550546
551- <br />
552547
553548#### 입출력 성능
554549넌다이렉트 버퍼는 입출력하기 위해 임시 다이렉트 버퍼를 생성하고 버퍼 내용을 임시 버퍼에 복사하여 사용하므로, 직접 다이렉트 버퍼를 사용하는 것보다 낮은 성능
@@ -559,8 +554,6 @@ NIO의 채널은 무조건 버퍼에 데이터를 보관해야 하기 때문에
559554#### 넌다이렉트 버퍼
560555각 버퍼 클래스의 정적메소드인 ``` allocate() ``` 또는 ``` wrap() ``` 메소드 호출
561556
562- <br />
563-
564557#### 다이렉트 버퍼
565558.``` ByteBuffer ``` 클래스의 정적메소드인 ``` allocateDirect() ``` 메소드를 호출하여 생성하고, 다른 타입의 다이렉트 버퍼를 생성하려면 ``` ByteBuffer ``` 의 ``` asCharBuffer() ``` , ``` asIntBuffer() ``` 등의 메소드 활용
566559
@@ -577,6 +570,7 @@ class PerformanceEx {
577570
578571 long size = Files . size(from);
579572
573+ // 버퍼를 사용할 채널 생성
580574 FileChannel fromChannel = FileChannel . open(from);
581575 FileChannel nonDirectChannel = FileChannel . open(to1, EnumSet . of(StandardOpenOption . CREATE , StandardOpenOption . WRITE ));
582576 FileChannel directChannel = FileChannel . open(to2, EnumSet . of(StandardOpenOption . CREATE , StandardOpenOption . WRITE ));
@@ -587,7 +581,7 @@ class PerformanceEx {
587581
588582 long start, end;
589583
590- // 넌다이렉트 입출력 시간 확인
584+ // 넌다이렉트 버퍼 입출력 시간 확인
591585 start = System . nanoTime();
592586 for (int i = 0 ; i < 100 ; i++ ) {
593587 fromChannel. read(nonDirect);
@@ -602,7 +596,7 @@ class PerformanceEx {
602596 // 파일 위치 0으로 설정(처음으로 되돌림)
603597 fromChannel. position(0 );
604598
605- // 다이렉트 입출력 시간 확인
599+ // 다이렉트 버퍼 입출력 시간 확인
606600 start = System . nanoTime();
607601 for (int i = 0 ; i < 100 ; i++ ) {
608602 fromChannel. read(direct);
0 commit comments