문제

사용자 데이터를 저장하는 Java에서 프로젝트를 관리하고 있습니다. 사용자는 온라인 또는 오프라인 일 수 있습니다. 사용자가 온라인 상태가되면 데이터 객체에 데이터 객체에로드되어 쉽게 액세스 할 수 있도록 로그 오프 할 때 오프로드됩니다.

오프라인 사용자의 경우 데이터가 동시에 데이터를 조작하는 여러 명령에서 데이터 손실을 동시에 액세스하지 못하면 DeakHashMap을로드 된 사용자 데이터 객체의 캐시로 저장합니다. 오프라인 데이터 객체에 액세스하여 수정하는 것이 필요하면 시스템이 파일에서로드하기 전에 캐시를 먼저 확인합니다.

내가 저장하는 방법을 생각할 수있는 유일한 것은 사용자 이름을 나타내는 문자열 키에 의해 임의의 것입니다. 그러나 Java가 작동하는 방법 때문에 VM의 문자열 캐싱 시스템으로 인해 항상 작동하는 것은 아닙니다.

원래 문자열 래퍼를 사용하는 것으로 생각되었지만 해시 코드를 사용하는 방법으로 인해 해시 맵을 사용하는 데있어 새 문자열 래퍼를 만드는 것은 내가 필요로하는 값을 가져 오지 않고 문자열 래퍼를 저장 한 경우 모든 시간에 키에 강력한 참조를 저장하여 목적을 물리 치십시오 (leadhashmap에서 키를 제거하지 못하게하십시오).

어쩌면 약탈 하시 맵이 어떻게 사용되어야하는지 이해하지 못할 것입니다 : s 이것은 약탈 하시아 맵이 어떻게 사용되어야하는지가 아니라면, 내가 원하는 것을하는 방법에 대한 다른 아이디어를 받아 들이기 위해 열려 있습니다.

도움이 되었습니까?

해결책

이 단락의 마지막 문장에서 javadoc에서 예기치 않게 작동하는 이유는 다음과 같습니다.

이 클래스는 주로 똑같은 핵심 객체와 함께 사용하기위한 것입니다. 메서드는== 연산자를 사용하여 객체 ID를 테스트합니다. 일단 그런대로 키는 결코 재현 될 수 없으므로 폐기되므로 할 수 없습니다. 나중에 약탈 하시 맵에서 그 열쇠를 조회하고 그 항목이 제거되었음을 놀라게했습니다. 이 수업은 일할 것입니다 동일한 방법이 기반이되지 않는 주요 개체와 완벽하게 문자열 인스턴스와 같은 객체 신원에 그런 재생성이있는 것 그러나 주요 객체는 약탈 맵 항목의 자동 제거 누구의 열쇠가 폐지되어 혼란 스러울 수 있습니다.

정말로 원하는 것은 값이 가비지를 수집 할 때가 아니라 값이 가비지를 수집 할 때가 아니라 값이 약한 값이 아닌 값이 아닌 값이 아닌 값이 약한 경우가 아닌 값이 제거 될 때 항목이 제거됩니다. 이 질문에 해당 문제에 대한 도움말을 찾을 수 있습니다 :

Java Deak Hash Map - 값의 약점을 기반으로 항목을 제거해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top