이 항목은 과 아무런 관련이 없습니다.; 적어도 개념적 수준.
요점은 : 자신의 일부 사용자 정의 객체 O가 X 바이트의 데이터를 소비하는 경우입니다. 그 X 바이트의 데이터는 오브젝트 O가 JVM 내에서 "활성"인 동안 JVM 내에서 할당됩니다.
즉, 이미지 바이트를 개체에 직접 넣을 때; 그 객체들이 새로운을 통해 생성되는지 아니면 일부 바이트 스트림에서 읽혀 지거나 n 다른 소스에서 읽혀지는 지 여부는 중요하지 않습니다.
정확히 그 이유 때문에 이미지 바이트를 직접 "비즈니스"개체에 "포함시키지 않으려 고합니다. 예를 들어 이미지를 하드 드라이브에 파일로 유지하는 것; 개체에 파일 이름 만 추가하면됩니다. 의미 : 실제로 화면에서 "레서피"를 올릴 때만 드라이브에서 그림을로드합니다. 그것을 사용자에게 표시합니다.
그래서 질문에 대한 답은 하나 개의 파일에서, 또는 N 파일에서 직렬화 된 객체를로드하는 경우 상관하지 않는 프로그램의 메모리 소비.
더 많은 메모리 소비는 어떻게하면 "레시피 개체"와 관련이있는 "리소스"를 다루는 정확한 내부 세부 사항에 달려 있습니다.
마지막으로 수행 할 작업은 요구 사항에 따라 다릅니다. 우리가 어떤 "평균적인 데스크탑"머신 상에있는 작은 자바 프로그램에 대해 이야기한다면; JVM에서 500 또는 1000 개의 "라이브"오브젝트를 유지하는 것이 좋습니다. 각자가 그림을보기 위해 500KB를 소비한다고하더라도 (그러나 이미 250MB의 RAM을 쉽게 사용할 수 있습니다!).
하지만 휴대 전화로 실행되는 일부 앱에 대해 이야기하고 있다면, 당신은 확실히 하지 마십시오 250 MB의 메모리를 낭비하고 거기에 500 개체를 유지하고 싶습니다.
그래서, 대부분의 경우, 합리적인 접근 방식은 더 보일 것 같은 :
- 메모리에 모든 시간을 알려진 조리법의 목록을 유지 그들에 대해 만
- "로드"조리법
- 은 일반적으로 사용자가 지정하는 형태를 직렬화 객체 변환하면서
에 속한다 (예를 들어, 이미지) "자원"에서 레시피 분리 "사용"으로 저장된 위치. 필요한 경우 저장된 위치에서 다시 읽습니다. – SachinSarawgi