GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed - #33744

Closed
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743
Closed

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed#33744
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743

Conversation

@zhztheplayer

@zhztheplayerzhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
Member

See apache/arrow-java#223

What changes are included in this PR?

  1. Close outstanding buffer(ledger)s during allocator-close;
  2. Report warning messages into log after the outstanding buffers were closed;
  3. To help implement the feature, construct a linked-list of buffer ledgers and hold a reference to tail element from buffer alloctor.

Are these changes tested?

  1. Current UTs and added UTs.
  2. Benchmarking by AllocatorBenchmarks

Are there any user-facing changes?

No

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue apache/arrow-java#223has been automatically assigned in GitHub to PR creator.

@lidavidmlidavidm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the purpose? I don't think we want this.

This silently suppresses an application logic error, and forces all allocations to go through a lock. The exception you get if there are unclosed buffers is very intentional.

The close() method's docstring is admittedly misleading, but I do not think the intent was to just close all buffers for you. (I think it's speaking more towards releasing any pooled or cached memory, which is definitely true for the Netty implementation.)

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

What is the purpose? I don't think we want this.

Manual reference counting of Arrow Java library can become very tricky, even becomes the bottle neck of daily development's efficiency in codes of complicated Java systems that relies on Arrow. This is just one way to make Arrow just be usable somehow in that case.

Or a more complete solution I can come up with is to include:

  1. A clean-up feature for allocator like this
  2. A mechanism to let buffer instances be managed by GC by leveraging e.g. Java weak ref or cleaner toolkit.

I understand performance should be considered emphatically in Arrow, however it's true that we must rely on smarter
strategies of memory management, more or less, in software development including the development around Arrow. I would suggest we provide such a smarter way to Java developers to let them choose between using manual and using auto. All of the current restrictions including the strong leak-checking can be preserved when user chooses the legacy manual way.

Would you think this topic is worth discussion? I am indeed not hurry to get this patch merged until the best solution is shaped. Thanks.

@lidavidm

Copy link
Copy Markdown
Member

This patch forces everyone to take the opposite tradeoff, however.

Some sort of nursery that auto-closes buffers may be useful, but I think it should be separate from the base allocator. (The allocator also has a 'listener' to be notified of allocation/deallocation events; possibly you could build this mechanism on top of that.) And nondeterministic collection of buffers is liable to bite you; the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

Thanks and would you suggest to add a new implementation of interface BufferAllocator (e.g. AutoCleanBufferAllocator)? If yes I can try start from there.

the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

Yes I can image something like that too. What I can try is to reuse the JVM's direct memory counter which can trigger GC when reaching its limit, or rebuild a similar counter like that. Not sure if there are some better solutions but this one is probably OK since it was at least from JVM itself.

@lidavidm

Copy link
Copy Markdown
Member

I don't think it needs a new interface.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

I don't think it needs a new interface.

I meant a new implementation of the interface, e.g.

class AutoCleanBufferAllocator implements BufferAllocator

@lidavidm

Copy link
Copy Markdown
Member

Ah, ok. That sounds fine. I would explore the allocation listener further, though...

@zhztheplayer

zhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
MemberAuthor

I see. I'll find out to what extent can allocation listener be leveraged in this feature. Thanks for the suggestion.

@amol-

Copy link
Copy Markdown
Member

Closing because it has been untouched for a while, in case it's still relevant feel free to reopen and move it forward 👍

@amol-amol- closed this Mar 30, 2023
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #33743 has no components, please add labels for components.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Java] Release outstanding buffers when BaseAllocator is being closed

3 participants

@zhztheplayer@lidavidm@amol-
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed - #33744

Closed
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743
Closed

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed#33744
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743

Conversation

@zhztheplayer

@zhztheplayerzhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
Member

See apache/arrow-java#223

What changes are included in this PR?

  1. Close outstanding buffer(ledger)s during allocator-close;
  2. Report warning messages into log after the outstanding buffers were closed;
  3. To help implement the feature, construct a linked-list of buffer ledgers and hold a reference to tail element from buffer alloctor.

Are these changes tested?

  1. Current UTs and added UTs.
  2. Benchmarking by AllocatorBenchmarks

Are there any user-facing changes?

No

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue apache/arrow-java#223has been automatically assigned in GitHub to PR creator.

@lidavidmlidavidm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the purpose? I don't think we want this.

This silently suppresses an application logic error, and forces all allocations to go through a lock. The exception you get if there are unclosed buffers is very intentional.

The close() method's docstring is admittedly misleading, but I do not think the intent was to just close all buffers for you. (I think it's speaking more towards releasing any pooled or cached memory, which is definitely true for the Netty implementation.)

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

What is the purpose? I don't think we want this.

Manual reference counting of Arrow Java library can become very tricky, even becomes the bottle neck of daily development's efficiency in codes of complicated Java systems that relies on Arrow. This is just one way to make Arrow just be usable somehow in that case.

Or a more complete solution I can come up with is to include:

  1. A clean-up feature for allocator like this
  2. A mechanism to let buffer instances be managed by GC by leveraging e.g. Java weak ref or cleaner toolkit.

I understand performance should be considered emphatically in Arrow, however it's true that we must rely on smarter
strategies of memory management, more or less, in software development including the development around Arrow. I would suggest we provide such a smarter way to Java developers to let them choose between using manual and using auto. All of the current restrictions including the strong leak-checking can be preserved when user chooses the legacy manual way.

Would you think this topic is worth discussion? I am indeed not hurry to get this patch merged until the best solution is shaped. Thanks.

@lidavidm

Copy link
Copy Markdown
Member

This patch forces everyone to take the opposite tradeoff, however.

Some sort of nursery that auto-closes buffers may be useful, but I think it should be separate from the base allocator. (The allocator also has a 'listener' to be notified of allocation/deallocation events; possibly you could build this mechanism on top of that.) And nondeterministic collection of buffers is liable to bite you; the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

Thanks and would you suggest to add a new implementation of interface BufferAllocator (e.g. AutoCleanBufferAllocator)? If yes I can try start from there.

the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

Yes I can image something like that too. What I can try is to reuse the JVM's direct memory counter which can trigger GC when reaching its limit, or rebuild a similar counter like that. Not sure if there are some better solutions but this one is probably OK since it was at least from JVM itself.

@lidavidm

Copy link
Copy Markdown
Member

I don't think it needs a new interface.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

I don't think it needs a new interface.

I meant a new implementation of the interface, e.g.

class AutoCleanBufferAllocator implements BufferAllocator

@lidavidm

Copy link
Copy Markdown
Member

Ah, ok. That sounds fine. I would explore the allocation listener further, though...

@zhztheplayer

zhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
MemberAuthor

I see. I'll find out to what extent can allocation listener be leveraged in this feature. Thanks for the suggestion.

@amol-

Copy link
Copy Markdown
Member

Closing because it has been untouched for a while, in case it's still relevant feel free to reopen and move it forward 👍

@amol-amol- closed this Mar 30, 2023
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #33743 has no components, please add labels for components.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Java] Release outstanding buffers when BaseAllocator is being closed

3 participants

@zhztheplayer@lidavidm@amol-
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed - #33744

Closed
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743
Closed

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed#33744
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743

Conversation

@zhztheplayer

@zhztheplayerzhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
Member

See apache/arrow-java#223

What changes are included in this PR?

  1. Close outstanding buffer(ledger)s during allocator-close;
  2. Report warning messages into log after the outstanding buffers were closed;
  3. To help implement the feature, construct a linked-list of buffer ledgers and hold a reference to tail element from buffer alloctor.

Are these changes tested?

  1. Current UTs and added UTs.
  2. Benchmarking by AllocatorBenchmarks

Are there any user-facing changes?

No

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue apache/arrow-java#223has been automatically assigned in GitHub to PR creator.

@lidavidmlidavidm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the purpose? I don't think we want this.

This silently suppresses an application logic error, and forces all allocations to go through a lock. The exception you get if there are unclosed buffers is very intentional.

The close() method's docstring is admittedly misleading, but I do not think the intent was to just close all buffers for you. (I think it's speaking more towards releasing any pooled or cached memory, which is definitely true for the Netty implementation.)

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

What is the purpose? I don't think we want this.

Manual reference counting of Arrow Java library can become very tricky, even becomes the bottle neck of daily development's efficiency in codes of complicated Java systems that relies on Arrow. This is just one way to make Arrow just be usable somehow in that case.

Or a more complete solution I can come up with is to include:

  1. A clean-up feature for allocator like this
  2. A mechanism to let buffer instances be managed by GC by leveraging e.g. Java weak ref or cleaner toolkit.

I understand performance should be considered emphatically in Arrow, however it's true that we must rely on smarter
strategies of memory management, more or less, in software development including the development around Arrow. I would suggest we provide such a smarter way to Java developers to let them choose between using manual and using auto. All of the current restrictions including the strong leak-checking can be preserved when user chooses the legacy manual way.

Would you think this topic is worth discussion? I am indeed not hurry to get this patch merged until the best solution is shaped. Thanks.

@lidavidm

Copy link
Copy Markdown
Member

This patch forces everyone to take the opposite tradeoff, however.

Some sort of nursery that auto-closes buffers may be useful, but I think it should be separate from the base allocator. (The allocator also has a 'listener' to be notified of allocation/deallocation events; possibly you could build this mechanism on top of that.) And nondeterministic collection of buffers is liable to bite you; the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

Thanks and would you suggest to add a new implementation of interface BufferAllocator (e.g. AutoCleanBufferAllocator)? If yes I can try start from there.

the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

Yes I can image something like that too. What I can try is to reuse the JVM's direct memory counter which can trigger GC when reaching its limit, or rebuild a similar counter like that. Not sure if there are some better solutions but this one is probably OK since it was at least from JVM itself.

@lidavidm

Copy link
Copy Markdown
Member

I don't think it needs a new interface.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

I don't think it needs a new interface.

I meant a new implementation of the interface, e.g.

class AutoCleanBufferAllocator implements BufferAllocator

@lidavidm

Copy link
Copy Markdown
Member

Ah, ok. That sounds fine. I would explore the allocation listener further, though...

@zhztheplayer

zhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
MemberAuthor

I see. I'll find out to what extent can allocation listener be leveraged in this feature. Thanks for the suggestion.

@amol-

Copy link
Copy Markdown
Member

Closing because it has been untouched for a while, in case it's still relevant feel free to reopen and move it forward 👍

@amol-amol- closed this Mar 30, 2023
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #33743 has no components, please add labels for components.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Java] Release outstanding buffers when BaseAllocator is being closed

3 participants

@zhztheplayer@lidavidm@amol-
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed - #33744

Closed
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743
Closed

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed#33744
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743

Conversation

@zhztheplayer

@zhztheplayerzhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
Member

See apache/arrow-java#223

What changes are included in this PR?

  1. Close outstanding buffer(ledger)s during allocator-close;
  2. Report warning messages into log after the outstanding buffers were closed;
  3. To help implement the feature, construct a linked-list of buffer ledgers and hold a reference to tail element from buffer alloctor.

Are these changes tested?

  1. Current UTs and added UTs.
  2. Benchmarking by AllocatorBenchmarks

Are there any user-facing changes?

No

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue apache/arrow-java#223has been automatically assigned in GitHub to PR creator.

@lidavidmlidavidm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the purpose? I don't think we want this.

This silently suppresses an application logic error, and forces all allocations to go through a lock. The exception you get if there are unclosed buffers is very intentional.

The close() method's docstring is admittedly misleading, but I do not think the intent was to just close all buffers for you. (I think it's speaking more towards releasing any pooled or cached memory, which is definitely true for the Netty implementation.)

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

What is the purpose? I don't think we want this.

Manual reference counting of Arrow Java library can become very tricky, even becomes the bottle neck of daily development's efficiency in codes of complicated Java systems that relies on Arrow. This is just one way to make Arrow just be usable somehow in that case.

Or a more complete solution I can come up with is to include:

  1. A clean-up feature for allocator like this
  2. A mechanism to let buffer instances be managed by GC by leveraging e.g. Java weak ref or cleaner toolkit.

I understand performance should be considered emphatically in Arrow, however it's true that we must rely on smarter
strategies of memory management, more or less, in software development including the development around Arrow. I would suggest we provide such a smarter way to Java developers to let them choose between using manual and using auto. All of the current restrictions including the strong leak-checking can be preserved when user chooses the legacy manual way.

Would you think this topic is worth discussion? I am indeed not hurry to get this patch merged until the best solution is shaped. Thanks.

@lidavidm

Copy link
Copy Markdown
Member

This patch forces everyone to take the opposite tradeoff, however.

Some sort of nursery that auto-closes buffers may be useful, but I think it should be separate from the base allocator. (The allocator also has a 'listener' to be notified of allocation/deallocation events; possibly you could build this mechanism on top of that.) And nondeterministic collection of buffers is liable to bite you; the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

Thanks and would you suggest to add a new implementation of interface BufferAllocator (e.g. AutoCleanBufferAllocator)? If yes I can try start from there.

the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

Yes I can image something like that too. What I can try is to reuse the JVM's direct memory counter which can trigger GC when reaching its limit, or rebuild a similar counter like that. Not sure if there are some better solutions but this one is probably OK since it was at least from JVM itself.

@lidavidm

Copy link
Copy Markdown
Member

I don't think it needs a new interface.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

I don't think it needs a new interface.

I meant a new implementation of the interface, e.g.

class AutoCleanBufferAllocator implements BufferAllocator

@lidavidm

Copy link
Copy Markdown
Member

Ah, ok. That sounds fine. I would explore the allocation listener further, though...

@zhztheplayer

zhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
MemberAuthor

I see. I'll find out to what extent can allocation listener be leveraged in this feature. Thanks for the suggestion.

@amol-

Copy link
Copy Markdown
Member

Closing because it has been untouched for a while, in case it's still relevant feel free to reopen and move it forward 👍

@amol-amol- closed this Mar 30, 2023
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #33743 has no components, please add labels for components.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Java] Release outstanding buffers when BaseAllocator is being closed

3 participants

@zhztheplayer@lidavidm@amol-
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed - #33744

Closed
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743
Closed

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed#33744
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743

Conversation

@zhztheplayer

@zhztheplayerzhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
Member

See apache/arrow-java#223

What changes are included in this PR?

  1. Close outstanding buffer(ledger)s during allocator-close;
  2. Report warning messages into log after the outstanding buffers were closed;
  3. To help implement the feature, construct a linked-list of buffer ledgers and hold a reference to tail element from buffer alloctor.

Are these changes tested?

  1. Current UTs and added UTs.
  2. Benchmarking by AllocatorBenchmarks

Are there any user-facing changes?

No

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue apache/arrow-java#223has been automatically assigned in GitHub to PR creator.

@lidavidmlidavidm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the purpose? I don't think we want this.

This silently suppresses an application logic error, and forces all allocations to go through a lock. The exception you get if there are unclosed buffers is very intentional.

The close() method's docstring is admittedly misleading, but I do not think the intent was to just close all buffers for you. (I think it's speaking more towards releasing any pooled or cached memory, which is definitely true for the Netty implementation.)

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

What is the purpose? I don't think we want this.

Manual reference counting of Arrow Java library can become very tricky, even becomes the bottle neck of daily development's efficiency in codes of complicated Java systems that relies on Arrow. This is just one way to make Arrow just be usable somehow in that case.

Or a more complete solution I can come up with is to include:

  1. A clean-up feature for allocator like this
  2. A mechanism to let buffer instances be managed by GC by leveraging e.g. Java weak ref or cleaner toolkit.

I understand performance should be considered emphatically in Arrow, however it's true that we must rely on smarter
strategies of memory management, more or less, in software development including the development around Arrow. I would suggest we provide such a smarter way to Java developers to let them choose between using manual and using auto. All of the current restrictions including the strong leak-checking can be preserved when user chooses the legacy manual way.

Would you think this topic is worth discussion? I am indeed not hurry to get this patch merged until the best solution is shaped. Thanks.

@lidavidm

Copy link
Copy Markdown
Member

This patch forces everyone to take the opposite tradeoff, however.

Some sort of nursery that auto-closes buffers may be useful, but I think it should be separate from the base allocator. (The allocator also has a 'listener' to be notified of allocation/deallocation events; possibly you could build this mechanism on top of that.) And nondeterministic collection of buffers is liable to bite you; the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

Thanks and would you suggest to add a new implementation of interface BufferAllocator (e.g. AutoCleanBufferAllocator)? If yes I can try start from there.

the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

Yes I can image something like that too. What I can try is to reuse the JVM's direct memory counter which can trigger GC when reaching its limit, or rebuild a similar counter like that. Not sure if there are some better solutions but this one is probably OK since it was at least from JVM itself.

@lidavidm

Copy link
Copy Markdown
Member

I don't think it needs a new interface.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

I don't think it needs a new interface.

I meant a new implementation of the interface, e.g.

class AutoCleanBufferAllocator implements BufferAllocator

@lidavidm

Copy link
Copy Markdown
Member

Ah, ok. That sounds fine. I would explore the allocation listener further, though...

@zhztheplayer

zhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
MemberAuthor

I see. I'll find out to what extent can allocation listener be leveraged in this feature. Thanks for the suggestion.

@amol-

Copy link
Copy Markdown
Member

Closing because it has been untouched for a while, in case it's still relevant feel free to reopen and move it forward 👍

@amol-amol- closed this Mar 30, 2023
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #33743 has no components, please add labels for components.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Java] Release outstanding buffers when BaseAllocator is being closed

3 participants

@zhztheplayer@lidavidm@amol-
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed - #33744

Closed
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743
Closed

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed#33744
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743

Conversation

@zhztheplayer

@zhztheplayerzhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
Member

See apache/arrow-java#223

What changes are included in this PR?

  1. Close outstanding buffer(ledger)s during allocator-close;
  2. Report warning messages into log after the outstanding buffers were closed;
  3. To help implement the feature, construct a linked-list of buffer ledgers and hold a reference to tail element from buffer alloctor.

Are these changes tested?

  1. Current UTs and added UTs.
  2. Benchmarking by AllocatorBenchmarks

Are there any user-facing changes?

No

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue apache/arrow-java#223has been automatically assigned in GitHub to PR creator.

@lidavidmlidavidm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the purpose? I don't think we want this.

This silently suppresses an application logic error, and forces all allocations to go through a lock. The exception you get if there are unclosed buffers is very intentional.

The close() method's docstring is admittedly misleading, but I do not think the intent was to just close all buffers for you. (I think it's speaking more towards releasing any pooled or cached memory, which is definitely true for the Netty implementation.)

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

What is the purpose? I don't think we want this.

Manual reference counting of Arrow Java library can become very tricky, even becomes the bottle neck of daily development's efficiency in codes of complicated Java systems that relies on Arrow. This is just one way to make Arrow just be usable somehow in that case.

Or a more complete solution I can come up with is to include:

  1. A clean-up feature for allocator like this
  2. A mechanism to let buffer instances be managed by GC by leveraging e.g. Java weak ref or cleaner toolkit.

I understand performance should be considered emphatically in Arrow, however it's true that we must rely on smarter
strategies of memory management, more or less, in software development including the development around Arrow. I would suggest we provide such a smarter way to Java developers to let them choose between using manual and using auto. All of the current restrictions including the strong leak-checking can be preserved when user chooses the legacy manual way.

Would you think this topic is worth discussion? I am indeed not hurry to get this patch merged until the best solution is shaped. Thanks.

@lidavidm

Copy link
Copy Markdown
Member

This patch forces everyone to take the opposite tradeoff, however.

Some sort of nursery that auto-closes buffers may be useful, but I think it should be separate from the base allocator. (The allocator also has a 'listener' to be notified of allocation/deallocation events; possibly you could build this mechanism on top of that.) And nondeterministic collection of buffers is liable to bite you; the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

Thanks and would you suggest to add a new implementation of interface BufferAllocator (e.g. AutoCleanBufferAllocator)? If yes I can try start from there.

the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

Yes I can image something like that too. What I can try is to reuse the JVM's direct memory counter which can trigger GC when reaching its limit, or rebuild a similar counter like that. Not sure if there are some better solutions but this one is probably OK since it was at least from JVM itself.

@lidavidm

Copy link
Copy Markdown
Member

I don't think it needs a new interface.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

I don't think it needs a new interface.

I meant a new implementation of the interface, e.g.

class AutoCleanBufferAllocator implements BufferAllocator

@lidavidm

Copy link
Copy Markdown
Member

Ah, ok. That sounds fine. I would explore the allocation listener further, though...

@zhztheplayer

zhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
MemberAuthor

I see. I'll find out to what extent can allocation listener be leveraged in this feature. Thanks for the suggestion.

@amol-

Copy link
Copy Markdown
Member

Closing because it has been untouched for a while, in case it's still relevant feel free to reopen and move it forward 👍

@amol-amol- closed this Mar 30, 2023
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #33743 has no components, please add labels for components.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Java] Release outstanding buffers when BaseAllocator is being closed

3 participants

@zhztheplayer@lidavidm@amol-
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed - #33744

Closed
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743
Closed

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed#33744
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743

Conversation

@zhztheplayer

@zhztheplayerzhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
Member

See apache/arrow-java#223

What changes are included in this PR?

  1. Close outstanding buffer(ledger)s during allocator-close;
  2. Report warning messages into log after the outstanding buffers were closed;
  3. To help implement the feature, construct a linked-list of buffer ledgers and hold a reference to tail element from buffer alloctor.

Are these changes tested?

  1. Current UTs and added UTs.
  2. Benchmarking by AllocatorBenchmarks

Are there any user-facing changes?

No

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue apache/arrow-java#223has been automatically assigned in GitHub to PR creator.

@lidavidmlidavidm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the purpose? I don't think we want this.

This silently suppresses an application logic error, and forces all allocations to go through a lock. The exception you get if there are unclosed buffers is very intentional.

The close() method's docstring is admittedly misleading, but I do not think the intent was to just close all buffers for you. (I think it's speaking more towards releasing any pooled or cached memory, which is definitely true for the Netty implementation.)

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

What is the purpose? I don't think we want this.

Manual reference counting of Arrow Java library can become very tricky, even becomes the bottle neck of daily development's efficiency in codes of complicated Java systems that relies on Arrow. This is just one way to make Arrow just be usable somehow in that case.

Or a more complete solution I can come up with is to include:

  1. A clean-up feature for allocator like this
  2. A mechanism to let buffer instances be managed by GC by leveraging e.g. Java weak ref or cleaner toolkit.

I understand performance should be considered emphatically in Arrow, however it's true that we must rely on smarter
strategies of memory management, more or less, in software development including the development around Arrow. I would suggest we provide such a smarter way to Java developers to let them choose between using manual and using auto. All of the current restrictions including the strong leak-checking can be preserved when user chooses the legacy manual way.

Would you think this topic is worth discussion? I am indeed not hurry to get this patch merged until the best solution is shaped. Thanks.

@lidavidm

Copy link
Copy Markdown
Member

This patch forces everyone to take the opposite tradeoff, however.

Some sort of nursery that auto-closes buffers may be useful, but I think it should be separate from the base allocator. (The allocator also has a 'listener' to be notified of allocation/deallocation events; possibly you could build this mechanism on top of that.) And nondeterministic collection of buffers is liable to bite you; the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

Thanks and would you suggest to add a new implementation of interface BufferAllocator (e.g. AutoCleanBufferAllocator)? If yes I can try start from there.

the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

Yes I can image something like that too. What I can try is to reuse the JVM's direct memory counter which can trigger GC when reaching its limit, or rebuild a similar counter like that. Not sure if there are some better solutions but this one is probably OK since it was at least from JVM itself.

@lidavidm

Copy link
Copy Markdown
Member

I don't think it needs a new interface.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

I don't think it needs a new interface.

I meant a new implementation of the interface, e.g.

class AutoCleanBufferAllocator implements BufferAllocator

@lidavidm

Copy link
Copy Markdown
Member

Ah, ok. That sounds fine. I would explore the allocation listener further, though...

@zhztheplayer

zhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
MemberAuthor

I see. I'll find out to what extent can allocation listener be leveraged in this feature. Thanks for the suggestion.

@amol-

Copy link
Copy Markdown
Member

Closing because it has been untouched for a while, in case it's still relevant feel free to reopen and move it forward 👍

@amol-amol- closed this Mar 30, 2023
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #33743 has no components, please add labels for components.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Java] Release outstanding buffers when BaseAllocator is being closed

3 participants

@zhztheplayer@lidavidm@amol-
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed - #33744

Closed
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743
Closed

GH-33743: [Java] Release outstanding buffers when BaseAllocator is being closed#33744
zhztheplayer wants to merge 3 commits into
apache:mainfrom
zhztheplayer:GH-33743

Conversation

@zhztheplayer

@zhztheplayerzhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
Member

See apache/arrow-java#223

What changes are included in this PR?

  1. Close outstanding buffer(ledger)s during allocator-close;
  2. Report warning messages into log after the outstanding buffers were closed;
  3. To help implement the feature, construct a linked-list of buffer ledgers and hold a reference to tail element from buffer alloctor.

Are these changes tested?

  1. Current UTs and added UTs.
  2. Benchmarking by AllocatorBenchmarks

Are there any user-facing changes?

No

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue apache/arrow-java#223has been automatically assigned in GitHub to PR creator.

@lidavidmlidavidm left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the purpose? I don't think we want this.

This silently suppresses an application logic error, and forces all allocations to go through a lock. The exception you get if there are unclosed buffers is very intentional.

The close() method's docstring is admittedly misleading, but I do not think the intent was to just close all buffers for you. (I think it's speaking more towards releasing any pooled or cached memory, which is definitely true for the Netty implementation.)

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

What is the purpose? I don't think we want this.

Manual reference counting of Arrow Java library can become very tricky, even becomes the bottle neck of daily development's efficiency in codes of complicated Java systems that relies on Arrow. This is just one way to make Arrow just be usable somehow in that case.

Or a more complete solution I can come up with is to include:

  1. A clean-up feature for allocator like this
  2. A mechanism to let buffer instances be managed by GC by leveraging e.g. Java weak ref or cleaner toolkit.

I understand performance should be considered emphatically in Arrow, however it's true that we must rely on smarter
strategies of memory management, more or less, in software development including the development around Arrow. I would suggest we provide such a smarter way to Java developers to let them choose between using manual and using auto. All of the current restrictions including the strong leak-checking can be preserved when user chooses the legacy manual way.

Would you think this topic is worth discussion? I am indeed not hurry to get this patch merged until the best solution is shaped. Thanks.

@lidavidm

Copy link
Copy Markdown
Member

This patch forces everyone to take the opposite tradeoff, however.

Some sort of nursery that auto-closes buffers may be useful, but I think it should be separate from the base allocator. (The allocator also has a 'listener' to be notified of allocation/deallocation events; possibly you could build this mechanism on top of that.) And nondeterministic collection of buffers is liable to bite you; the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

Thanks and would you suggest to add a new implementation of interface BufferAllocator (e.g. AutoCleanBufferAllocator)? If yes I can try start from there.

the GC does not see into native allocations and you can run out of memory despite having 'free' memory because the GC has not collected the small Java-side objects that hold the large native buffers.

Yes I can image something like that too. What I can try is to reuse the JVM's direct memory counter which can trigger GC when reaching its limit, or rebuild a similar counter like that. Not sure if there are some better solutions but this one is probably OK since it was at least from JVM itself.

@lidavidm

Copy link
Copy Markdown
Member

I don't think it needs a new interface.

@zhztheplayer

Copy link
Copy Markdown
MemberAuthor

I don't think it needs a new interface.

I meant a new implementation of the interface, e.g.

class AutoCleanBufferAllocator implements BufferAllocator

@lidavidm

Copy link
Copy Markdown
Member

Ah, ok. That sounds fine. I would explore the allocation listener further, though...

@zhztheplayer

zhztheplayer commented Jan 18, 2023

Copy link
Copy Markdown
MemberAuthor

I see. I'll find out to what extent can allocation listener be leveraged in this feature. Thanks for the suggestion.

@amol-

Copy link
Copy Markdown
Member

Closing because it has been untouched for a while, in case it's still relevant feel free to reopen and move it forward 👍

@amol-amol- closed this Mar 30, 2023
@github-actions

Copy link
Copy Markdown

⚠️ GitHub issue #33743 has no components, please add labels for components.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Java] Release outstanding buffers when BaseAllocator is being closed

3 participants

@zhztheplayer@lidavidm@amol-