본문 바로가기

Java

(19)
JAVA File I/O에 관하여 자바 파일 복사 방법Stream FileInputStream inputStream = new FileInputStream(file);FileOutputStream outputStream = new FileOutputStream(saveFullPath); int bytesRead = 0;byte[] buffer = new byte[1024]; while ((bytesRead = inputStream.read(buffer, 0, 1024)) != -1) { outputStream.write(buffer, 0, bytesRead);} outputStream.close();inputStream.close(); 문제점 : 파일크기( 정확히는 스트림의 길이 ) 만큼 while문을 돌면서 끊임없이 읽고쓰기를 반복 중..
#java.util.ConcurrentModificationException 이슈 상황 단순히 enhanced for loop ( 15줄과 같은 반복문 ) 를 쓰면서 제거하는 예제인데, 멀티쓰레드에서나 보던 ConcurrentModificationException이 발생하였다. 도대체 왜??? remove() 함수를 따라가다 보면 checkForComodification() 이라는 함수를 확인할 수 있다. expectedModCount는 리스트의 데이터 변경 여부를 체크하기 위한 변수이다. remove()에서 호출하는 fastRemove()에서 modCount를 증가시킨 상태에서 Iterator의 next()가 호출 되면 위의 예외를 던지게 된다. ( fail-fast???) ConcurrentModificationException의 정의 This exception may be thr..
Memory leak 문제 해결 문제 TOP가 메모리를 3GB까지 잡아먹는 괴물이 되고, 프로세스가 뻗어버리는 문제 [ TOP Heap 메모리 캡쳐 화면 ] VisualVM JDK에 설치된 메모리 분석 도구 ( TOP가 사용하는 JDK의 bin에 있음 ) Heap memory 관리가 어떻게 됨? 메모리 분석을 하기전에, JVM이 메모리 관리를 어떻게 하는지도 모르는데 무엇을 하겠는가. Heap memory 관리 이해하기 JVM은 OS로부터 java heap memory를 할당하고 자바 어플래케이션을 위한 heap을 관리한다. 어플리케이션이 새로운 object를 만들 때, JVM은 이것을 저장하기 위해 heap memory의 인접 영역에 하위 할당한다. 다른 객체에 의해 참조되고 있는 힙에 있는 객체 , 계속 참조되고 있으면 힙에 남아있..
ClassNotFoundException ( 클래스 로더 정리 ) 문제 TOP 구동이 안된다...... java.lang.ClassNotFoundException: org.eclipse.osgi.compatibility.state.Activator at java.net.URLClassLoader.findClass(Unknown Source) ClassNotFoundException이 뭔데? Class.forName methodClassLoader.findSystemClass methodClassLoader.loadClass method 위와 같은 함수에서 클래스를 로딩할 때 예외가 발생하면 해당 에러를 던져줌. 즉 java class를 못찾거나 runtime에 클래스를 로드할 수 없는 경우이다. Class Loader가 뭔데? [ Oracle Docs 해석 ] Clas..
export Jar Export Jar 상황 배포 자동화 작업중 특정 java 파일을 execute 하고 싶어 jar 생성 ( 단순히 java를 실행하는 경우 plug-in dependencies를 못 가져와 묶어서 실행이 필요함) 1. jar 만들기 export > jar file > 설정.... ( main class 등등 ) 문제 1. Display class를 못찾네? (plug-in dependencies에 있는 ) 자동으로 포함이 안되는구나? export > runnable jar 로 하면 포함이 됨 해결 완료....
Interface를 이용하여 Callback 구현하기 정의 Caller가 Callee를 호출하는 것이 아니라 Callee가 Caller를 호출하는 것 예를 들어, 파일을 읽는 function에 읽고 난 후 처리해야 할 로직을 파라미터로 넘겨주면, 해당 function 안에서 파일 관련 처리를 다하고 파라미터로 넘어간 로직이 실행이 된다. 왜 사용함? 비동기적으로 처리가 가능하고, 코드 재사용성이 가능함 ( 함수 추상화가 가능함 ) 그래서 UI나 비동기 처리 시스템에서 많이 사용한다.
close() 함수 Stream이란? 우리가 키보드에 A를 입력한 경우 화면에 A가 출력이 되는데, 키보드의 A가 입력됐음을 듣고 파일에 A를 전송해주는 것을 누가할까? 바로 입출력을 도와주는 Stream이다. 키보드 뿐만 아니라, 프린트,마우스, 기타 기기들의 입출력을 도와준다. 사용자의 입장에서 입력을 하면 InputStream, 데이터가 나가면 OutputStream이 있다. InputStream은 Stream으로 데이터를 보냅니다. OutputStream은 Stream에 있는 데이터들을 목적지( e.g. 파일 )로 보내버립니다. ( flush()가 다음과 같은 역할을 합니다. ) 우리는 하드웨어적인 복잡한 과정을 신경쓰지 않고 Stream을 사용하기만 하면 됩니다. InputStream - close() 동작 과정 ..
Java Collections (1) 자바의 Collection을 사용할 때 어떠한 상황에서 써야할 지 모른채 써왔다. Map,Table 중 어떤 것이 thread-safe한지도 모르고 등등... 그래서 자바 Collection들에 대해 정리해 볼 필요를 느꼈다.자바에서 제공하는 Collection Framework들은 대부분 Collection interface의 구현체이다. ( Map 종류들은 제외 )조건을 만족하는 item 삭제하기 - Java 8에 추가된 함수 : removeIf() - Loop 내에서 remove 하기 - Loop 내에서 잘못된 remove * ConcurrentModificationException은 누가 어떻게 던지나? -
Nashorn Nashron : 자바 프로그램에서 사용할 수 있는 자바스크립트 엔진http://opennote46.tistory.com/210 참고 ( TODO )