java 다이렉트 버퍼에 대하여
·
Server
[ Direct Buffer 탄생 배경 ]기존 io 에서 불편했던 것 초기 버전 Java에서는 전통적인 I/O 에서 소켓에 바이트를 write 하는 방식을 보자유저레벨의 자바 애플리케이션 힙 영역에 전달할 데이터 생성 한다.유저레벨의 네이티비 메모리(물리 메모리) 공간에 고정된 버퍼를 하나 만들어서 여기다 전달할 데이터를 복사한다. 즉 유저레벨 → 유저레벨로의 복사다.위에서 만든 물리 메모리 버퍼의 참조를 시스템 콜로 넘긴다. 시스템콜은 이 버퍼의 데이터를 커널레벨의 소켓 버퍼로 옮긴다. 이건 유저레벨 → 커널레벨로의 복사다. 왜 힙영역에서 물리메모리 영역으로 복사하나?힙 메모리에서 바로 커널 메모리로 복사하면 되는거 아닌가!?Java의 가비지 컬렉터는 힙 메모리를 자유롭게 이동 및 압축시키기 때문에,..