현재 주어진 정수를 기반으로 문자열을 반환하는 거대한 메서드가 있습니다. 그것은 각각 진술을 사용하며, 각각 case
은 string constant
을 반환합니다. 길이가 약 10 ~ 50 자 정도 인 683 개의 고유 한 문자열이 있으며, 모두 해당 메서드 내에서만 사용됩니다. 이 문자열이 언제로드되는지 알고 싶습니다. 수업 시간에로드됩니까? 그렇다면 내가 처음에이 문자열을로드 할 수있는 방법이 있습니까? 더 이상 참조가 없을 때 garbaged가 발생합니까?java - 메소드 내부의 문자열이 클래스로드 시간에 즉시로드됩니까?
현재로서는 문자열 테이블이 들어있는 파일에서 해당 문자열을로드하고 있습니다. WeakHashMap에 배치해야합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?
또 다른 대안은 정적 필드에서 각 문자열을 보유하는 클래스를 만드는 것입니다. 그렇게하면 필드 값을 처음 가져올 때만로드됩니다. 그러나 그것은 나의 꾸러미를 거대하게 할 것이다.
또한 dalvik-vm은 동일한 문자열 상수로드 루틴을 사용합니까?
2 바이트/char * 50 문자/문자열 * 700 문자열 = 70 kB의 데이터. 나는 그것에 대해 걱정하지 않을 것이다. –
정말 switch 문이 아니라 연관 배열을 사용해야합니다. 스위치 문을보고 싶지 않습니다. 그런 다음 연관 배열을 원하는 수준으로 배치하고 원하는 위치에서 원하는 위치로 가져올 수 있습니다. – Leifingson
답변이 있습니다 : http://stackoverflow.com/questions/4918399/what-type-of-memory-heap-or-stack-string-constant-pool-in-java-gets-stored –