Macro works perfectly on a 64-bits machine, but with condition on a 32-bits one

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Macro works perfectly on a 64-bits machine, but with condition on a 32-bits one

JulienD
Hi everyone,

I created a small macro to convert a bunch of image stacks from tif to vtk.gz and rename it. It works fine on every computer with a 64-bits architecture, but, in the case of a computer with a 32-bits, there is some issues.
One of the first step of the macro is to open one stack and get informations out of it. On a 32-bits machine, if the number of steps in the stack is below 150, no problem, the macro works. If the number of step is higher, it raise this "classical" error :

(Fiji Is Just) ImageJ 2.0.0-rc-42/1.50d; Java 1.6.0_24 [32-bit]; Windows XP 5.1; 268MB of 1500MB (17%)
 
java.lang.OutOfMemoryError
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(FileInputStream.java:199)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
        at java.io.DataInputStream.readFully(DataInputStream.java:178)
        at java.io.DataInputStream.readFully(DataInputStream.java:152)
        at ij.macro.Functions.openAsRawString(Functions.java:3947)
        at ij.macro.Functions.doFile(Functions.java:3757)
        at ij.macro.Functions.getStringFunction(Functions.java:268)
        at ij.macro.Interpreter.getStringTerm(Interpreter.java:1290)
        at ij.macro.Interpreter.getString(Interpreter.java:1269)
        at ij.macro.Interpreter.doStringAssignment(Interpreter.java:928)
        at ij.macro.Interpreter.doAssignment(Interpreter.java:722)
        at ij.macro.Interpreter.doStatement(Interpreter.java:242)
        at ij.macro.Interpreter.doBlock(Interpreter.java:605)
        at ij.macro.Interpreter.doStatement(Interpreter.java:269)
        at ij.macro.Interpreter.doIf(Interpreter.java:963)
        at ij.macro.Interpreter.doStatement(Interpreter.java:245)
        at ij.macro.Interpreter.doStatements(Interpreter.java:215)
        at ij.macro.Interpreter.run(Interpreter.java:112)
        at ij.macro.Interpreter.run(Interpreter.java:82)
        at ij.macro.Interpreter.run(Interpreter.java:93)
        at ij.plugin.Macro_Runner.runMacro(Macro_Runner.java:153)
        at ij.IJ.runMacro(IJ.java:129)
        at ij.IJ.runMacro(IJ.java:118)
        at net.imagej.legacy.IJ1Helper$3.call(IJ1Helper.java:917)
        at net.imagej.legacy.IJ1Helper$3.call(IJ1Helper.java:914)
        at net.imagej.legacy.IJ1Helper.runMacroFriendly(IJ1Helper.java:880)
        at net.imagej.legacy.IJ1Helper.runMacro(IJ1Helper.java:914)
        at net.imagej.legacy.plugin.IJ1MacroEngine.eval(IJ1MacroEngine.java:116)
        at net.imagej.legacy.plugin.IJ1MacroEngine.eval(IJ1MacroEngine.java:163)
        at org.scijava.script.ScriptModule.run(ScriptModule.java:174)
        at org.scijava.module.ModuleRunner.run(ModuleRunner.java:167)
        at org.scijava.module.ModuleRunner.call(ModuleRunner.java:126)
        at org.scijava.module.ModuleRunner.call(ModuleRunner.java:65)
        at org.scijava.thread.DefaultThreadService$2.call(DefaultThreadService.java:191)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)

I dedicated 1.5G of memory to Fiji, there is no reason it can't open one stack, moreover if it can open it when the number of steps in the stack is less than 150.

If anyone of you has a clue, it would be great.

Thank you !

Julien