Dan*_*Dan 1 java io garbage-collection
我想运行一个关闭垃圾收集的Java程序.在我自己的代码中管理内存并不是那么困难.但是该程序需要相当多的I/O. 有没有办法(没有使用JNI进行所有I/O操作)我可以使用纯Java实现这一点?
谢谢Daniel
在我自己的代码中管理内存并不是那么困难.
这并不困难 - 这是不可能的.例如:
public void foo() {
Object o = new Object();
// free(o); // Doh! No "free" keyword in Java.
}
Run Code Online (Sandbox Code Playgroud)
没有垃圾收集器的帮助,如何o回收消耗的内存?
我假设你的问题是你可能想要避免由于你的应用程序执行高水平的I/O而导致的垃圾收集造成的零星暂停.如果是这种情况,则存在用于最小化创建的对象的数量的技术(例如,重用池中的对象).您还可以考虑启用Concurrent Mark Sweep Collector.
并发标记清除收集器(也称为并发收集器或CMS)针对对垃圾收集暂停敏感的应用程序.
小智 8
您尝试实现的目标通常是在投资银行业务中开发,以开发低延迟的实时系统.
要避免GC,您只需确保在应用程序的启动和预热阶段后不分配内存.您似乎已经注意到Java NIO在内部进行了不必要的内存分配.不幸的是,你别无选择,只能为有问题的电话编写JNI替代品.您至少需要为NIO选择器编写替代品.
由于类似的不需要的内存分配,您将不得不避免使用大多数Java库.例如,您将不得不避免使用像String这样的不可变对象,避免使用Boxing,重新实现在程序的整个生命周期中预分配足够条目的集合.
以这种方式编写Java代码并不容易,但肯定是可能的.我正在开发一个平台来做到这一点.
| 归档时间: |
|
| 查看次数: |
3635 次 |
| 最近记录: |