where memory is allocate outside of Java heap. gc
来源:互联网 发布:win10软件注册表 编辑:程序博客网 时间:2024/05/17 12:56
JDK provides abillity to allocate so-called direct ByteBuffers, where memory is allocate outside of Java heap. This can be beneficial since this memory is not touched by garbage collector, and as such does not contribute to GC overhead: this is a very useful for property for long-living things like caches.
However, there is one critical problem with existing implementation: underlying memory is only allocated asynchronously when the owning ByteBuffer is garbage-collected; there is no way to force early deallocation. This can be problematic since GC cycle itself is not influenced by handling of ByteBuffers, and given that ByteBuffers are likely to reside in Old Generation memory area, it is possible that GC is called hours after ByteBuffer is no longer in use.
But in theory it should be possible to use sun.misc.Unsafe
methods (freeMemory, allocateMemory) directly: this is what JDK itself uses for allocating/deallocating native memory. Looking at code, one potential concern I see is possibility of double-freeing of memory -- so I would want to make sure that state would be properly cleaned.
Can anyone point me to code that does this? Ideally would want to use this instead of JNA.
NOTE: I saw this question which is sort of related.
Looks like the answers pointed out are good way to go: here is code example from Elastic Search that uses the idea. Thanks everyon!
- where memory is allocate outside of Java heap. gc
- Java heap out of memory
- java heap out of memory分析
- linux java Cannot allocate memory
- Where is the “Father of Java?”
- Where is the memory gone?
- Tomcat 5.5 java heap stack out of memory solution
- 报错:out of memory java heap space
- davlik heap out of memory
- Java Heap Memory
- outside of class is not definition
- Why is the maximum size of the Java heap fixed?
- Java Heap Memory vs Stack Memory Difference
- 【java基础】Stack Memory VS Heap Memory
- ORA-04031:unable to allocate N bytes of shared memory
- ORA-04031: unable to allocate 4096 bytes of shared memory
- ORA-04031: unable to allocate 2048024 bytes of shared memory
- ORA-04030: out of process memory when trying to allocate
- Spring 注解总结
- PLSQL调试技巧
- uboot与linux的参数传递
- poj 2019 Cornfields
- uboot之u盘启动kernel
- where memory is allocate outside of Java heap. gc
- 通俗地说压缩音频格式
- 程序员到底怎么了
- JavaScript数字和字符串转换小结(转)
- 复制功能
- 基于博弈树启发式搜索的五子棋游戏
- 在C#中调用存储过程(WinForm)
- LINUX的passwd文件
- C++控制台操作(基本操作的代码)