2017-01-05 2 views
2

나는 요리 책을 자바로 프로그래밍했다. 이를 위해 요리의 이름과 그림 같은 정보가 저장되는 Recipe-Object를 만들었습니다.프로그램에로드가 너무 많습니까? (자바)

이 모든 객체를 List에 넣고 모든 recipes로 List를 serialize합니다. 요리 책을 다시 열면이 모든 요리법 (각 요리법에 그림이 있음)이 프로그램에 다시로드됩니다.

500 개 이상의 요리법이있는 경우 500+ 그림을 프로그램에로드해야합니다.

내 질문 :

  • 이 사진을 내 컴퓨터의 RAM에 저장됩니까?
  • 각 레서피를 고유 한 파일로 직렬화하는 것이 더 좋고 만 선택된 레시피를로드 할 수 있습니까?
+0

에 속한다 (예를 들어, 이미지) "자원"에서 레시피 분리 "사용"으로 저장된 위치. 필요한 경우 저장된 위치에서 다시 읽습니다. – SachinSarawgi

답변

4

이 항목은 과 아무런 관련이 없습니다.; 적어도 개념적 수준.

요점은 : 자신의 일부 사용자 정의 객체 O가 X 바이트의 데이터를 소비하는 경우입니다. 그 X 바이트의 데이터는 오브젝트 O가 JVM 내에서 "활성"인 동안 JVM 내에서 할당됩니다.

즉, 이미지 바이트를 개체에 직접 넣을 때; 그 객체들이 새로운을 통해 생성되는지 아니면 일부 바이트 스트림에서 읽혀 지거나 n 다른 소스에서 읽혀지는 지 여부는 중요하지 않습니다.

정확히 그 이유 때문에 이미지 바이트를 직접 "비즈니스"개체에 "포함시키지 않으려 고합니다. 예를 들어 이미지를 하드 드라이브에 파일로 유지하는 것; 개체에 파일 이름 만 추가하면됩니다. 의미 : 실제로 화면에서 "레서피"를 올릴 때만 드라이브에서 그림을로드합니다. 그것을 사용자에게 표시합니다.

그래서 질문에 대한 답은 하나 개의 파일에서, 또는 N 파일에서 직렬화 된 객체를로드하는 경우 상관하지 않는 프로그램의 메모리 소비.

더 많은 메모리 소비는 어떻게하면 "레시피 개체"와 관련이있는 "리소스"를 다루는 정확한 내부 세부 사항에 달려 있습니다.

마지막으로 수행 할 작업은 요구 사항에 따라 다릅니다. 우리가 어떤 "평균적인 데스크탑"머신 상에있는 작은 자바 프로그램에 대해 이야기한다면; JVM에서 500 또는 1000 개의 "라이브"오브젝트를 유지하는 것이 좋습니다. 각자가 그림을보기 위해 500KB를 소비한다고하더라도 (그러나 이미 250MB의 RAM을 쉽게 사용할 수 있습니다!).

하지만 휴대 전화로 실행되는 일부 앱에 대해 이야기하고 있다면, 당신은 확실히 하지 마십시오 250 MB의 메모리를 낭비하고 거기에 500 개체를 유지하고 싶습니다.

그래서, 대부분의 경우, 합리적인 접근 방식은 더 보일 것 같은 :

  1. 메모리에 모든 시간을 알려진 조리법의 목록을 유지 그들에 대해 만
  2. "로드"조리법
  3. 은 일반적으로 사용자가 지정하는 형태를 직렬화 객체 변환하면서
+0

고마워요! 나는 그것을 시도 할 것이다. –