Datentypen Cache Images Heap Space Error

DanaL

Mitglied
Hallo

Ich habe schon vor einem halben Monat einmal etwas gefragt und die Antoworten habe ich großteils Umgesetzt.

Ich habe eine kleine DesignVerwaltung wo der Anwender sehr viele Bilder sehen möchte. Ich hatte das Problem das das Laden der Bilder immer zu lange dauerte.
Jetzt lasse ich einfach nur 30 Bilder laden und wenn er weiterscrollt oder umblättert werden immer nur sehr wenige Bilder hinzugeladen so das er immer die Bilder die er sieht geladen hatt und die anderen nicht.

Auch das Leistungsproblem habe ich jetzt unter Kontrolle.

Aber ich würde trotzdem gerne die Bilder in den cache Laden.
Ich habe alles mögliche probiert und ausgetestet aber nichts hat Funktioniert.

Es läuft alles super wenn ich nur mit 500 Bilder oder so teste aber wenn ich dan mit allen testen will dan bekomme ich immer einen Heap Space Error. Das Prgoramm darf 500 MB cache haben und ich brauche ungefähr 2k Bilder mit jeweils 30kb. Das wären ja eigentlich nur 60 MB da müsste ich noch reichlich Platz haben denn das Programm braucht selbst nur 200-300MB.

Aber wenn ich den Taskmanager beobachte dann sehe ich das es ca 550MB braucht wenn der Heap Spce Error kommt und den Error wirft das Programm beim Laden des 600. Bildes.

Mein letzter Code mit dem ich es Probiert habe:

Java:
public class ImageRegistry {
   public HashMap<String, BufferedImage> registy = new HashMap<String, BufferedImage>();
   static String[] fileName;
   static File[] files;

    public ImageRegistry(){
        File dir = new File(*);
        files = dir.listFiles();
        fileName = new String[files.length];
        for(int i = 0 ;i<files.length;i++){
            fileName[i] = files[i].getName().replace(".png","");
            loadImage(fileName[i]);
        }
    }

   public BufferedImage getImage(String Name)
   {
      try{
          BufferedImage image = registy.get(Name);
          if(image==null){
              image = registy.get("noPhoto");
          }
          return image;  
        
      }catch(Exception e){
        e.printStackTrace();
          return null;
      }
   }

   public void loadImage(String Name) {
      try {
          File imgFl = new File(*);
          if(imgFl.isFile() && !imgFl.isDirectory()){
            BufferedImage img = ImageIO.read(imgFl);
           registy.put(Name, img);
           System.out.println("loaded " + Name);
           }
         
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
   
   }
}

Welche möglichkeit gibt es wie ich das machen könnte ?

Oder welche möglcihkeiten gibt es generell um in Java Objecte oder Files oder Images zu Cachen?

Lg Daniel
 

RalleYTN

Bekanntes Mitglied
Du kannst ein Bild hiermit aus dem Heap Size entfernen
Java:
image.flush;
image = null;
System.gc();

Du musst immer dann wenn du ein Bild nicht mehr brauchst das anwenden und sobald du es wieder brauchst neu laden. Sollte rein theoretisch funktionieren.
 

thecain

Top Contributor
Du hast sie auch gleich mehrmals im files und in der Map, dann übergibst du beim laden nur den Namen, obwohl du schon ein File hättest und machst ein neues File Objekt.

Zudem hast du im files Array alle Dateien drin, nicht nur die Bilder.

Ansonsten mal den Heap anschauen mit Tools wie z.b. VisualVM

Den GC manuell aufzurufen sollte eigentlich selten bis nie manuell nötig sein, v.a. nicht in Fällen wie deinem.
 

DanaL

Mitglied
Ja mit
Java:
image.flush;
mache ich es zurzeit auch aber ich möchte alle Bilder im cache haben damit ich sie viel schneller Laden kann als immer wieder wenn ich sie brauche aus dem Verzeichniss herausladen zu müssen.

Und ja das war einwenig kompliziert wie ich es umgesetzt habe aber wie gesagt ich bin noch ein Anfänger.
Das File Array beinhaltet nur die Liste der Files welche nicht serh groß ist da diese Liste nicht die Files in das Programm läd sondern nur weiß welche files es gibt.

Habe es abgeändert und ich bekomme an der gleichen stelle wieder den Heap Space Error.

Abgeändert:

Java:
public class ImageRegistry {
   public HashMap<String, BufferedImage> registy = new HashMap<String, BufferedImage>(1000);
   static File[] files;

    public ImageRegistry(){
       
        File dir = new File("C:/PPCDVImage/");
        files = dir.listFiles();
        for(int i = 0 ;i<files.length;i++){
            loadImage(files[i]);
        }
       
    }

   public BufferedImage getImage(String Name)
   {
      try{
          BufferedImage image = registy.get(Name);
          if(image==null){
              image = registy.get("noPhoto");
          }
          return image;   
         
      }catch(Exception e){
        e.printStackTrace();
          return null;
      }
   }

   public void loadImage(File imgFl) {
      try {
            BufferedImage img = ImageIO.read(imgFl);
           registy.put(imgFl.getName(), img);
           System.out.println("loaded " + imgFl.getName());
          
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    
   }
}
 

RalleYTN

Bekanntes Mitglied
Entweder erhöhst du den heap size der Anwendung mit einem Startbefehl, dessen Name ich nicht mehr kenne. Oder du erkennst, dass du nicht beides Haben kannst. Entweder alles ohne OutOfMemoryException und längeren Ladezeiten oder eine schnelle OutOfMemoryException.
 

DanaL

Mitglied
Ja ok danke erstmal.

Das Problem ist das Programm läuft auf einem Terminal server dort habe ich leider nicht mehr Memory zur verfügung, habe schon noch reichlich Memory aber diesen darf ich nicht für mein Programm verwenden da es für sehr viele andere Sachen verwendet wird.
 

thecain

Top Contributor
Hast du dir angeschaut, wie es auf dem Heap aussieht? Wie du gesagt hast, die Bilder sind gesamthaft nur 60MB gross, die sollten auf dem Heap platz haben, da ist die Lösung nicht einfach den Heap raufzuschrauben, sondern zu schauen, was den Speicher denn einnimmt, wenn nicht die Bilder bzw wo noch kopien sind. Eventuell ja in der Anzeige?
 

DanaL

Mitglied
Ja ok das stimmt auch
Ich werde mir das morgen auf der Arbeit anschauen habe heute leider keine Zeit mehr.

Ich schicke euch dann morgen was rausgekommen ist.

LG
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Bei Javainstallation Cache ausschalten Allgemeine Java-Themen 13
F Eclipse cache vorhanden? Allgemeine Java-Themen 5
J Stream-basierter Cache Allgemeine Java-Themen 4
M Batch zum Java Cache löschen Allgemeine Java-Themen 3
M Webstart-Fehler Cache Allgemeine Java-Themen 3
S Java Servlet Cache + Cache-Management Allgemeine Java-Themen 14
O Cache-Simulator Allgemeine Java-Themen 5
F ClassLoader und "Cache" Allgemeine Java-Themen 2
L Tomcat cache Allgemeine Java-Themen 10
T Jar-Files und JVM-Cache? Allgemeine Java-Themen 2
I getImage() - Cache abschalten Allgemeine Java-Themen 2
L Internet Cache löschen Allgemeine Java-Themen 3
M Cache & Datein kopieren Allgemeine Java-Themen 3
R Zugriff auf Internet Explorer Cache Allgemeine Java-Themen 8
C images einbinden Allgemeine Java-Themen 7
X Images painten - Was ist schneller? Allgemeine Java-Themen 2
Kenan89 Schnelleres Einlesen von Images Allgemeine Java-Themen 6
D 2D-Grafik Funktionierende .jar datei mit Images (jpg) erzeugen Allgemeine Java-Themen 2
J iText und images Allgemeine Java-Themen 6
MQue Images für Buttons Allgemeine Java-Themen 5
P Images abwechselnd Darstellen Allgemeine Java-Themen 12
E aktualisieren eines Images Allgemeine Java-Themen 6
E 2 Images auf einem JFrame Allgemeine Java-Themen 8
A Pufferung von Images Allgemeine Java-Themen 7
L Label mit Images Allgemeine Java-Themen 20
F Dateigröße eines entfernen Images ermitteln Allgemeine Java-Themen 3
E Wie Java Heap Space vergrößern? Allgemeine Java-Themen 3
A Heap-Sort Allgemeine Java-Themen 2
L Java OutOfMemoryError Java heap space Allgemeine Java-Themen 3
H Änderung im maximalen heap space unter Windows 7 ?! Allgemeine Java-Themen 5
N Mögliches heap space lokalisieren Allgemeine Java-Themen 11
D Grundsätzliche Fragen zum Heap Space Allgemeine Java-Themen 12
Thallius Wie mache ich eine Java App mit Icon startbar die mehr Heap Speicher braucht? Allgemeine Java-Themen 3
T jstat Heap(Size/Usage) PermGen(Size/Used) vs JVisual VM Allgemeine Java-Themen 2
H Frage wegen Heap-Speicher Allgemeine Java-Themen 2
L java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 10
R Referenzen im Heap anzeigen Allgemeine Java-Themen 3
S Compiler-Fehler Heap space! Allgemeine Java-Themen 2
V Java Heap Size -Xmx1024m reicht nicht! Allgemeine Java-Themen 14
C Method Area, Stack, Heap Allgemeine Java-Themen 7
A Umgebungsvariable Kann Heap Space nicht vergrößern Allgemeine Java-Themen 6
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
M *.jar >>> *.exe und "heap size" Allgemeine Java-Themen 11
E Konfigurieren des Java Heap-Spaces Allgemeine Java-Themen 5
D Java Heap error trotz anpassungen mit -xmx Allgemeine Java-Themen 4
Guybrush Threepwood Heap-Space "überwinden" Allgemeine Java-Themen 2
O Problem mit dem Heap Space (Speicherüberlauf) Allgemeine Java-Themen 12
S Java heap space zu klein? Allgemeine Java-Themen 6
A Heap in Jcreator erhöhen? Allgemeine Java-Themen 5
P Java Heap Size feststellen Allgemeine Java-Themen 6
K Heap-Volllaufen bei ArrayList<Integer> Allgemeine Java-Themen 9
B Java Heap Space Allgemeine Java-Themen 5
byte JVM Maximum Heap (Windows XP Prof. 32bit) Allgemeine Java-Themen 4
A Wie am besten Daten auslagern um heap zu schonen Allgemeine Java-Themen 4
G Probleme mit dem Java heap Allgemeine Java-Themen 14
E Heap und Comparable (warning: [unchecked] unchecked cast) Allgemeine Java-Themen 2
A OutOfMemoryError: Java heap space Allgemeine Java-Themen 11
kb22 CMS mit großen Dateien (heap problem) Allgemeine Java-Themen 3
hdi Heap Sapce Error bei sehr großem String Allgemeine Java-Themen 5
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
I Java heap space Allgemeine Java-Themen 3
K Erhöhung Java Heap Space in Netbeans 6.5 - funktioniert nicht oder bringt nichts? Allgemeine Java-Themen 1
S Java Heap Dump erstellen Allgemeine Java-Themen 1
T zu Beginn der main: Heap space ermitteln und hochsetzen Allgemeine Java-Themen 11
K OutOfMemoryError: Java heap space troz -Xms1024m Allgemeine Java-Themen 2
O viele Datensätze aus Datenbank - Java Heap Space - Excepion Allgemeine Java-Themen 25
V Java heap space Problem Allgemeine Java-Themen 8
V Wieso Heap Space Problem? Allgemeine Java-Themen 14
Saxony ANT, ProGuard und Java heap space Allgemeine Java-Themen 8
MQue Heap erhöhen Allgemeine Java-Themen 8
V fehlermeldung heap space, endlosschleife??? Allgemeine Java-Themen 4
M Heap Speicher voll bei spezieller Resize Methode Allgemeine Java-Themen 5
P Java Heap Space Allgemeine Java-Themen 11
P Dump von JavaWS Heap Allgemeine Java-Themen 4
P Java heap Allgemeine Java-Themen 5
F OutOfMemoryError: Java heap space - Speicher verändern Allgemeine Java-Themen 8
P Java Heap Space Exception Allgemeine Java-Themen 30
M JVM Non-Heap läuft voll Allgemeine Java-Themen 4
MQue Java Heap space Probleme Allgemeine Java-Themen 26
T Langsames Laden von Bildern und Heap Exception Allgemeine Java-Themen 7
B Erkennen welche Objekte den Heap verbrauchen? Allgemeine Java-Themen 2
Y PDF Report mit Tomcat Heap Space Problem Allgemeine Java-Themen 9
J java Thread java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 7
G Error: java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 2
G Zum tausendsten Mal Heap Size Allgemeine Java-Themen 5
P out of memory -> heap wächst und wächst Allgemeine Java-Themen 7
S Heap dump Allgemeine Java-Themen 3
F Heap Overflow Allgemeine Java-Themen 9
M Aktuellen heap space ermitteln? Allgemeine Java-Themen 2
G Wird bei RAM-Mangel für Java Heap Space geswappt? Allgemeine Java-Themen 34
B Der Heap Space, ich weiß nicht mehr weiter! Allgemeine Java-Themen 15
H java heap space (outofmemory error) Allgemeine Java-Themen 3
D statisch heap size erhöhen Allgemeine Java-Themen 4
F java.lang.OutOfMemoryError: Java heap space Allgemeine Java-Themen 22
L Häufigkeit der Werte in Datei zählen! Heap Space beschränkt! Allgemeine Java-Themen 31
V Serialisierungsproblem bzw. Heap Problem Allgemeine Java-Themen 13
C Java heap Space, aber wie wegkriegen? Allgemeine Java-Themen 3
P Jave Heap Size und ObjectStreams.ein java bug ? Allgemeine Java-Themen 5
welterde Heap Überlauf Allgemeine Java-Themen 2
F Verfügbaren Heap-Speicher setzen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben