Some speed difference is to be expected, but the numbers at the end are too 
extreme.

You are mixing micro and macro benchmarks.

The micro benchmarks indicate a 10x slowdown, the macro benchmark 700x !

Maybe your algorithm is not optimally implemented in Pharo ?

> On 16 Mar 2015, at 09:49, Nicolas Anquetil <[email protected]> wrote:
> 
> I have been doing some file intensive activities and found my program to be 
> VERY slow (see at the end).
> Just to be sure I ran them in Java and found it was much faster
> 
> So I did a small test:
> ---
> [10 timesRepeat: [i := 0.
> '/home/anquetil/Documents/RMod/Tools/workspace/Blocks/jfreechart-0_9_0.mse' 
> asFileReference readStream contents do: [ :c | i:= i+1].
> ] ] timeToRunWithoutGC.
> ---
> 
> result = 12.932 sec
> 
> similar thing (as far as I can tell) 10 times in java: 1.482 sec.
> ---
>    public static void main(String[] args) {
>        int length =0;
>        try {
>            String filename = 
> "/home/anquetil/Documents/RMod/Tools/workspace/Blocks/jfreechart-0_9_0.mse";
>            String content = new 
> String(Files.readAllBytes(Paths.get(filename)), "UTF8");
>            for (int i=0; i < content.length(); i++) {
>                content.charAt(i);
>                length = length+1;
>            }
>        } catch (IOException e) {
>            e.printStackTrace();
>        }
>        System.out.println(length);
>    }
> ---
> 
> Because my program is MUCH slower (see at the end) in Smalltalk than in Java, 
> I did another experiment:
> 
> ---
> [1 to: 10 do: [:i| 1 to: 100000000 do: [:j | String new] ] ] 
> timeToRunWithoutGC.
> ---
> 
> result = 33.063 sec
> 
> and in java: 4.382 sec.
> ---[10 runs of]
>    public static void main(String[] args) {
>        for (int i=0; i < 100000000; i++) {
>            new String();
>        }
>    }
> ---
> 
> 
> 
> 
> Concretly, my need was:
> Take 2600 methods in a Moose model, take their source code (therefore reading 
> files), for methods longer than 100  lines (there are 29 of them), go through 
> there code to find the blocks (matching {}).
> In smalltalk it ran > 12hours and I had processed 5 methods of the 29 long 
> ones
> I reimplemented in Java (basically, just changing from pharo to java syntax) 
> and it took 1 minutes to compute everything ...
> 
> :-(
> 
> On the good side, it was much easier to program it in smalltalk (about half a 
> day to think about the algorithm, experiement, implement, test) than in Java 
> (another 1/2 day, just to recode the algorithm that already worked).
> 
> nicolas
> 


Reply via email to