<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="markdown-here-wrapper" data-md-url="" style="">
<p style="margin: 0px 0px 1.2em !important;">On 28/03/2024 01:55,
刘希晨 wrote:</p>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div class="markdown-here-exclude">
<p></p>
<blockquote type="cite" cite="mid:CABUmArRGbdx1L+Etj+=w3JVZQvgvhKQGPfZkrV5prW-+fLd=5w@mail.gmail.com">So
in my opinion, it's better if JDK could provide a mechanism,
to allocate a heap MemorySegment, with given byteSize and
byteAlignment, without zeroing, for these use cases.</blockquote>
<p></p>
</div>
<p style="margin: 0px 0px 1.2em !important;"></p>
<p style="margin: 0px 0px 1.2em !important;">This seems
questionable. Note that FFM doesn’t even provide an allocation
for <em>off-heap</em> memory that avoids the zeroing. That is,
zeroing is only avoided when the API determines that the memory
contents are going to be overwritten anyways (e.g. using one of
the SegmentAllocator::allocateFrom methods).</p>
<p style="margin: 0px 0px 1.2em !important;">If I were to write
something like this, I would try to allocate long[] in “slabs”
and then recycle the slabs as needed.</p>
<p style="margin: 0px 0px 1.2em !important;">You probably need
some kind of “heap pool” abstraction, which can be used to
request “scoped arenas” out of it - e.g.</p>
<pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code class="hljs language-java" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;display: block; overflow-x: auto; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248); -moz-text-size-adjust: none;">HeapPool pool = <span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">new</span> HeapPool(...)
...
<span class="hljs-keyword" style="color: rgb(51, 51, 51); font-weight: bold;">try</span> (Arena arena = pool.arena()) {
...
} <span class="hljs-comment" style="color: rgb(153, 153, 136); font-style: italic;">// return memory to the pool</span>
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">This is generally
possible - but the lack of support for <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">MemorySegment::reinterptet</code>
for heap segments makes it hard to make this 100% safe. But,
once you’re down this rabbit hole, and managing memory manually
this way, does it really make a difference if the outer pool is
backed by long[] vs. off-heap memory?</p>
<p style="margin: 0px 0px 1.2em !important;">In general, passing
heap segments to native function is supported for API
compatibility reasons: e.g. you might have an API that is
already specified in terms of byte[], but then want to use this
API to call some native function. Sometimes the cost of copying
memory back and forth is too prohibitive, hence the “critical”
linker option.</p>
<p style="margin: 0px 0px 1.2em !important;">But if you are
writing code from scratch, there are, I believe, good ways to
recycle <em>off-heap</em> memory that do not require to touch
heap memory (which has other limitations). For instance, one of
the items in my todo list is to build a fast stack-like
allocation arena, which allows for fast allocation and recycle
(push/pop). I think arenas like that would go a long way to
avoid use of heap memory when not really required.</p>
<p style="margin: 0px 0px 1.2em !important;">Cheers<br>
Maurizio</p>
<div title="MDH:PHA+PGJyPjwvcD48ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPk9uIDI4LzAzLzIwMjQgMDE6
NTUsIOWImOW4jOaZqCB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0
ZT0ibWlkOkNBQlVtQXJSR2JkeDFMK0V0ais9dzNKVlpRdmd2aEtRR1BmWmtyVjVwclctK2ZMZD01
d0BtYWlsLmdtYWlsLmNvbSI+U28gaW4gbXkgb3BpbmlvbiwgaXQncyBiZXR0ZXIgaWYgSkRLIGNv
dWxkIHByb3ZpZGUgYSBtZWNoYW5pc20sIHRvIAphbGxvY2F0ZSBhIGhlYXAgTWVtb3J5U2VnbWVu
dCwgd2l0aCBnaXZlbiBieXRlU2l6ZSBhbmQgYnl0ZUFsaWdubWVudCwgCndpdGhvdXQgemVyb2lu
ZywgZm9yIHRoZXNlIHVzZSBjYXNlcy48L2Jsb2NrcXVvdGU+PHA+VGhpcyBzZWVtcyBxdWVzdGlv
bmFibGUuIE5vdGUgdGhhdCBGRk0gZG9lc24ndCBldmVuIHByb3ZpZGUgYW4gYWxsb2NhdGlvbiBm
b3IgX29mZi1oZWFwXyBtZW1vcnkgdGhhdCBhdm9pZHMgdGhlIHplcm9pbmcuIFRoYXQgaXMsIHpl
cm9pbmcgaXMgb25seSBhdm9pZGVkIHdoZW4gdGhlIEFQSSBkZXRlcm1pbmVzIHRoYXQgdGhlIG1l
bW9yeSBjb250ZW50cyBhcmUgZ29pbmcgdG8gYmUgb3ZlcndyaXR0ZW4gYW55d2F5cyAoZS5nLiB1
c2luZyBvbmUgb2YgdGhlIFNlZ21lbnRBbGxvY2F0b3I6OmFsbG9jYXRlRnJvbSBtZXRob2RzKS48
L3A+PHA+SWYgSSB3ZXJlIHRvIHdyaXRlIHNvbWV0aGluZyBsaWtlIHRoaXMsIEkgd291bGQgdHJ5
IHRvIGFsbG9jYXRlIGxvbmdbXSBpbiAic2xhYnMiIGFuZCB0aGVuIHJlY3ljbGUgdGhlIHNsYWJz
IGFzIG5lZWRlZC48L3A+PHA+WW91IHByb2JhYmx5IG5lZWQgc29tZSBraW5kIG9mICJoZWFwIHBv
b2wiIGFic3RyYWN0aW9uLCB3aGljaCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0ICJzY29wZWQgYXJl
bmFzIiBvdXQgb2YgaXQgLSBlLmcuPC9wPjxwPmBgYGphdmE8YnI+SGVhcFBvb2wgcG9vbCA9IG5l
dyBIZWFwUG9vbCguLi4pPGJyPjxicj4uLi48YnI+PGJyPnRyeSAoQXJlbmEgYXJlbmEgPSBwb29s
LmFyZW5hKCkpIHs8YnI+Jm5ic3A7Jm5ic3A7IC4uLjxicj59IC8vIHJldHVybiBtZW1vcnkgdG8g
dGhlIHBvb2w8YnI+YGBgPC9wPjxwPlRoaXMgaXMgZ2VuZXJhbGx5IHBvc3NpYmxlIC0gYnV0IHRo
ZSBsYWNrIG9mIHN1cHBvcnQgZm9yIGBNZW1vcnlTZWdtZW50OjpyZWludGVycHRldGAgZm9yIGhl
YXAgc2VnbWVudHMgbWFrZXMgaXQgaGFyZCB0byBtYWtlIHRoaXMgMTAwJSBzYWZlLiBCdXQsIG9u
Y2UgeW91J3JlIGRvd24gdGhpcyByYWJiaXQgaG9sZSwgYW5kIG1hbmFnaW5nIG1lbW9yeSBtYW51
YWxseSB0aGlzIHdheSwgZG9lcyBpdCByZWFsbHkgbWFrZSBhIGRpZmZlcmVuY2UgaWYgdGhlIG91
dGVyIHBvb2wgaXMgYmFja2VkIGJ5IGxvbmdbXSB2cy4gb2ZmLWhlYXAgbWVtb3J5PzwvcD48cD5J
biBnZW5lcmFsLCBwYXNzaW5nIGhlYXAgc2VnbWVudHMgdG8gbmF0aXZlIGZ1bmN0aW9uIGlzIHN1
cHBvcnRlZCBmb3IgQVBJIGNvbXBhdGliaWxpdHkgcmVhc29uczogZS5nLiB5b3UgbWlnaHQgaGF2
ZSBhbiBBUEkgdGhhdCBpcyBhbHJlYWR5IHNwZWNpZmllZCBpbiB0ZXJtcyBvZiBieXRlW10sIGJ1
dCB0aGVuIHdhbnQgdG8gdXNlIHRoaXMgQVBJIHRvIGNhbGwgc29tZSBuYXRpdmUgZnVuY3Rpb24u
IFNvbWV0aW1lcyB0aGUgY29zdCBvZiBjb3B5aW5nIG1lbW9yeSBiYWNrIGFuZCBmb3J0aCBpcyB0
b28gcHJvaGliaXRpdmUsIGhlbmNlIHRoZSAiY3JpdGljYWwiIGxpbmtlciBvcHRpb24uPC9wPjxw
PkJ1dCBpZiB5b3UgYXJlIHdyaXRpbmcgY29kZSBmcm9tIHNjcmF0Y2gsIHRoZXJlIGFyZSwgSSBi
ZWxpZXZlLCBnb29kIHdheXMgdG8gcmVjeWNsZSBfb2ZmLWhlYXBfIG1lbW9yeSB0aGF0IGRvIG5v
dCByZXF1aXJlIHRvIHRvdWNoIGhlYXAgbWVtb3J5ICh3aGljaCBoYXMgb3RoZXIgbGltaXRhdGlv
bnMpLiBGb3IgaW5zdGFuY2UsIG9uZSBvZiB0aGUgaXRlbXMgaW4gbXkgdG9kbyBsaXN0IGlzIHRv
IGJ1aWxkIGEgZmFzdCBzdGFjay1saWtlIGFsbG9jYXRpb24gYXJlbmEsIHdoaWNoIGFsbG93cyBm
b3IgZmFzdCBhbGxvY2F0aW9uIGFuZCByZWN5Y2xlIChwdXNoL3BvcCkuIEkgdGhpbmsgYXJlbmFz
IGxpa2UgdGhhdCB3b3VsZCBnbyBhIGxvbmcgd2F5IHRvIGF2b2lkIHVzZSBvZiBoZWFwIG1lbW9y
eSB3aGVuIG5vdCByZWFsbHkgcmVxdWlyZWQuPC9wPjxwPkNoZWVyczxicj5NYXVyaXppbzxicj48
L3A+PHA+PGJyPjwvcD4=" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;"></div>
</div>
</body>
</html>