Hi, I have a program which copies elements between two arrays of immutables in a tight loop. The sizes of the arrays never change. I've been struggling to get it to avoid spending a large chunk of its time in the garbage collector. I have an example of what I mean below.
With arrays of Int64 I get: elapsed time: 0.164429425 seconds (0 bytes allocated) With arrays of an immutable the same size as Int64 I get: elapsed time: 1.421834146 seconds (320000000 bytes allocated, 15.97% gc time) My understanding was arrays of immutables should behave like arrays of structs in C and not require heap allocation. Is there a way I can achieve that? I'm using Julia 0.3.3. Thanks, Will module immtest immutable Vec2 x::Float32 y::Float32 end # typealias element_type Vec2 # Results in allocation in the loop below typealias element_type Int64 # Does not cause allocation function runtest(reps) dst = resize!(element_type[], 100_000) src = resize!(element_type[], 10) @time begin for i=1:reps copy!(dst, 1000, src, 1, length(src)) # dst[1000:1009] = src # same performance as above end end end runtest(10_000_000) end
