From e753ca9ece65907494b0c09b29060ee7f90aa644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Tue, 20 Aug 2013 07:00:34 +0200 Subject: [PATCH] Issue #288 better memory/cache handling --- trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java | 2 ++ trunk/src/com/jpexs/decompiler/flash/helpers/Helper.java | 4 ++++ .../decompiler/flash/types/shaperecords/SHAPERECORD.java | 7 ++++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java index d6535ae6b..4f0fdf7e6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java @@ -2542,6 +2542,7 @@ public class MainFrame extends AppRibbonFrame implements ActionListener, TreeSel (new Thread() { @Override public void run() { + Helper.freeMem(); try { if (compressed) { swf.exportFla(errorHandler, selfile.getAbsolutePath(), new File(Main.file).getName(), Main.applicationName, Main.applicationVerName, Main.version, (Boolean) Configuration.getConfig("parallelSpeedUp", Boolean.TRUE)); @@ -2551,6 +2552,7 @@ public class MainFrame extends AppRibbonFrame implements ActionListener, TreeSel } catch (IOException ex) { View.showMessageDialog(null, translate("error.export") + ": " + ex.getLocalizedMessage(), translate("error"), JOptionPane.ERROR_MESSAGE); } + Helper.freeMem(); Main.stopWork(); } }).start(); diff --git a/trunk/src/com/jpexs/decompiler/flash/helpers/Helper.java b/trunk/src/com/jpexs/decompiler/flash/helpers/Helper.java index 8d42a55b1..5913e9028 100644 --- a/trunk/src/com/jpexs/decompiler/flash/helpers/Helper.java +++ b/trunk/src/com/jpexs/decompiler/flash/helpers/Helper.java @@ -504,4 +504,8 @@ public class Helper { timeStr += Helper.padZeros(timeS, 2) + "." + Helper.padZeros(timeMs, 3); return timeStr; } + public static void freeMem(){ + Cache.clearAll(); + System.gc(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java b/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java index bd1b6726d..4fba18e8d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java +++ b/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.types.shaperecords; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFOutputStream; +import com.jpexs.decompiler.flash.helpers.Cache; import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.tags.base.ImageTag; import com.jpexs.decompiler.flash.tags.base.NeedsCharacters; @@ -812,7 +813,7 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters { + ""; return ret; } - private static HashMap cache = new HashMap<>(); + private static Cache cache = Cache.getInstance(false); public static void clearShapeCache() { cache.clear(); @@ -834,8 +835,8 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters { public static BufferedImage shapeToImage(List tags, int shapeNum, FILLSTYLEARRAY fillStyles, LINESTYLEARRAY lineStylesList, List records, Color defaultColor) { String key = "shape_" + records.hashCode() + "_" + (defaultColor == null ? "null" : defaultColor.hashCode()); - if (cache.containsKey(key)) { - return cache.get(key); + if (cache.contains(key)) { + return (BufferedImage)cache.get(key); } RECT rect = new RECT(); List paths = getPaths(rect, shapeNum, fillStyles, lineStylesList, /*numFillBits, numLineBits,*/ records);