비동기 작업에서 XML을 비 직렬화하고 있습니다. 어떤 특정한 경우에는 역 직렬화 동안 메모리 오류가 발생합니다. 내 응용 프로그램에서 사용할 수있는 largeHeap
플래그가 있다는 것을 알고 있습니다. 그러나 그 장소에서 특별히 피하는 방법이 있습니까?XML deserialisation 중에 메모리가 부족합니다.
내 발견에 따라 System.gc()
은 아마도 그것을 해결하는 가장 좋은 해결책은 아닙니다. 아무도 그것을 통해 나를 도울 수 있습니까? 아래는 코드 스 니펫입니다.
private HashMap<String, Game> games = new HashMap<String, Game>();
public void load(LocalDatabaseHelper localDbHelper) throws Exception
{
synchronized(gameLockObject) {
GameDetailDAO dao = new GameDetailDAO(localDbHelper);
//this will fetch me the all the entities from databse
ArrayList<GameDetailEntity> dbGameDetails = dao.getEntities(null, null);
for (GameDetailEntity gameDetail : dbGameDetails) {
String gameLevel = gameDetail.getDetailLevel();
String gameXml = gameDetail.getGameData();
Game game = null;
if(gameLevel.equalsIgnoreCase("Novice")) {
game = Job.deserialiseJob(gameXml, NoviceLevel.class);
}
else if (gameLevel.equalsIgnoreCase("Expert")) {
game = Job.deserialiseJob(gameXml, ExpertLevel.class);
}
//set the job version
game.setGameversion(gameDetail.getGameVersion());
game.setMagicNumber(gameDetail.getMagicNumber());
game.setInactiveUser(gameDetail.getInactiveUser());
game.setStartTime(gameDetail.getStartTime());
game.setFinishTime(gameDetail.getFinishTime());
game.setGameCompletionTime(gameDetail.getGameCompletionTime());
if (!StringUtils.isNullOrEmpty(gameDetail.getGameStatus())) {
game.setGameStatus(GameStatus.valueOf(gameDetail.getGameStatus()));
}
//add the job to the store
games.put(gameDetail.getGameRef().toLowerCase(Locale.getDefault()), game);
}
}
}
게임 세부 엔티티는 몇 개나 있습니까? –
실제로 제한이 없지만 20 개가 있거나 80 개가있을 수 있습니다. 어떤 서비스가 나를 보내느냐에 달려 있습니다 – Android
그럼 모든 데이터는 어디에 있습니까? 'gameXml'에? 얼마나 큽니까? –