3 ms·
Managed languages almost never offer comparable escape hatches. Eg, it's not possible to do anything interesting at all with the JVM. Nor with JS. Nor with Pyth
by kllrnohj 4y ago
Managed languages almost never offer comparable escape hatches. Eg, it's not possible to do anything interesting at all with the JVM. Nor with JS. Nor with Python. Etc..
None of them let you do either placement allocations nor arena allocations.
.NET at least lets you do a linear array of structs, but that's nearly it.
- kaba0 4y agoJVM: bytebuffer, recently https://openjdk.java.net/jeps/393 https://openjdk.java.net/jeps/393 for even more low-level access. Python also has similar techniques available. .NET indeed leads the bunch though. But arbitrary pointer arithmetics is not necessary for arena allocation and safe usage.
- kllrnohj 4y agoNone of those let you allocate objects from those arenas. You can't deserialized into a ByteBuffer. Hell, you can't even do linear object arrays in the JVM (still waiting on value types...), the most basic of memory optimization techniques. Also for a JVM or Python, you can't avoid the extra overhead in an object (such as the ref count for python), which increases cache pressure and limits how much cache locality you can exploit.
- kaba0 4y agoBecause objects in these languages don’t have a uniform representation, it is up to the implementation how a java object is layed out in memory for example. But an allocated memory region is just a.. memory region in java and in C++ as well - you can store your custom data structure in both. Sure, value types will be a huge win, but it is not like you can’t store your RGB class’s data quite trivially into a huge linear structure as SOA or AOS as needed, and deserialize as needed.