/ / JAVA За цикъл липсва памет при работа с файлове с изображения - java, eclipse, обработка на изображения, извън паметта, купи

JAVA For Loop изчерпва паметта, когато работи, макар и файлове с изображения - java, eclipse, обработка на изображения, външна памет

Зареждам около 100 FITS изображения с 3000x2000 пиксела и след това преобразувам стойностите на пикселите за всяко изображение в матрица и пренасочвам матрицата и добавям всяко към SET.

Но аз бързо изчерпвам паметта в своята купчина. Наборът от int матрици не трябва да заема твърде много памет, нали? (Купата е около 2GB, вярвам, поне затъмнението използва 2GB, преди да даде грешка.)

Така че моето мислене е, че всеки нов обект Fits се съхранява в паметта след всеки цикъл. но не е нужно отново след приключване на цикъла, така че не знам защо това би било така.

Има ли начин да го направите, без да изтече паметта? Всеки път, когато се стартира програмата, ще има различен брой Fits файлове.

Public Set<int[][]> rescaleFitsList(File[] fitsFileList){

Set<int[][]> rescaledFitsSet = new HashSet();

for(File fits: fitsFileList){
Fits f = new Fits(fits);
double bScale = f.getHDU(0).getBScale;
double bLinear = f.getHDU(0).getBLinear;
short[][] counts = (short[][])f.getHDU(0).getKernel();
int[][] rescaledFits = new int[counts.length][counts[0].length];

for(int i =0, i<counts.length, i++){
for(int j =0, j<counts[0].length, j++){
rescaledFits[i][j] = (int)(bScale * counts[i][j] + bLinear);
}
}
rescaledFitsSet.add(rescaledFits);
}

}

Отговори:

-1 за отговор № 1

Приложение, което се стартира в рамките на Eclipse, има собствен JRE (в противен случай a System.exit(0) би убил и Eclipse IDE) със собствени VM настройки (различни от тези на Eclipse IDE). Така уверете се, че сте задали -Xmx във вашата конфигурация за стартиране / изпълнение: Изпълни> Изпълни конфигурации ...: Аргументи раздел: Аргументи на VM област.

100 изображения с размери 3000x2000 с едно int (4 байта) на пиксел = 100 x 3000 x 2,000 x 4 байта = 2 400 000 000 байта ≈ 2,2 GB. 2 GB вероятно не са достатъчно памет, но с 3 GB трябва да работи: -Xms3g -Xmx3g