서버 구성에서 제어하지 않는 코드에서 사용자 컬렉션이 있고 각 사용자의 배열은 byte[]
입니다.바이트 배열의 캐시를 만드는
때때로 이러한 byte[]
배열은 사용자에게 고유합니다. 하지만 종종 동일한 byte[]
배열을 가진 많은 수의 사용자가있을 것입니다.
내 서버의 RAM 소비를 줄이려고합니다.
나는 내 byte[]
배열을 문자열로 변환하고 인턴을 시도했지만, 종종 PERM-GEN 메모리 부족 오류가 발생합니다. 또한 사용자를 위해 byte[]
배열에 액세스하려고 할 때 인코딩/디코딩의 성능이 크게 저하되는 것을 볼 수 있습니다. 그리고 나는 많은 경우 최악의 경우 메모리 사용량이 증가하는 것을 볼 수 있습니다. 미리 문자열은 배열보다 훨씬 큽니다.
Java 배열이 해시 가능하지 않고 SoftReferences가 해당 포인트의 해시를 래핑하지 않을 때 어떻게하면 Set<SoftReference<byte[]>>
조회가 가능합니까? Map<byte[],SoftReference<byte[]>>
은 분명히 그 자체가 열쇠이기 때문에 스스로를 물리 치고 수집을 방해합니다. 그리고 Set
은 내부적으로 Map
의 관점에서 구현됩니다.
어떻게하면 인턴byte[]
배열이 가능합니까?
플라이급 패턴이 떠오른다. 또한 봐 http://stackoverflow.com/questions/1058149/using-a-byby-array-as-hashmap-key-java –
나는 당신이 당신의 바이트 배열을 포장해야한다고 생각합니다. 'new ByteArray (byte [] theBytes)'를 사용하고'ByteArray' 그 밖의'theBytes'에 대한 추가 long-lived 참조를 결코 만들지 않습니다. 그런 다음 'ByteArray'에 대한 소프트 참조가 올바르게 작동합니다. 애플리케이션에 대해서도 WeakHashMap를 볼 수 있습니다. –
Gene
이 바이트 배열의 크기는 얼마나됩니까? 사용자는 어떻게 보류합니까? – fge