3 ms·
It's probably all the memory allocations. I know that when I do work like this, creating a huge array up front and assigning to that typically results in massiv
by disgruntledphd2 3y ago
It's probably all the memory allocations. I know that when I do work like this, creating a huge array up front and assigning to that typically results in massive speedups.
I know basically nothing about Node though, so I could be completely wrong here.
- Karrot_Kream 3y agoYeah that's one way to do it. Another is to reuse structures where possible to not force reallocation. There's a bunch of ways.
- xmcqdpt2 3y agoNode.js has a decent JIT, or so I've heard. I have experience with the HotSpot JVM. For the JVM this code would absolutely stop allocating on the heap past 10k iterations of the loop. "Split a string then grab the parts in a hot loop" is ground stakes for JIT compilers. If they are seeing any GC activity once the loop gets hot, something else is going very wrong.
- disgruntledphd2 3y agoYeah but if you're appending in a loop you'll need to allocate memory every time, right? Can a JIT avoid or rewrite this?
- xmcqdpt2 3y agoYep the Hotspot JIT will absolutely allocate on the stack and reuse memory allocations inside loops. It also has escape analysis and it will detect you don't need the array of strings after the iteration. In that case it usually just allocates the strings directly at their final locations on the record object.
- disgruntledphd2 3y agoWow, that's super cool. Almost makes me wish i did stuff on the JVM (but until someone rewrites LAPACK for it, that seems unlikely).