是否有可能在Java中强制垃圾收集,即使这很棘手?我知道System.gc();和Runtime.gc ();但他们只建议做GC。如何强制GC?
当前回答
使用Java™虚拟机工具接口(JVM TI),实现该功能
jvmtiError ForceGarbageCollection(jvmtiEnv* env)
将“强制虚拟机执行垃圾收集。”JVM TI是JavaTM平台调试器体系结构(JPDA)的一部分。
其他回答
使用Java™虚拟机工具接口(JVM TI),实现该功能
jvmtiError ForceGarbageCollection(jvmtiEnv* env)
将“强制虚拟机执行垃圾收集。”JVM TI是JavaTM平台调试器体系结构(JPDA)的一部分。
手动请求GC(不是从System.gc()):
转到:bin文件夹在JDK中,例如。c: \ Program Files \ Java \ jdk1.6.0_31 \ bin 打开jconsole.exe 连接到所需的本地进程。 进入“内存”页签,单击“执行GC”。
我想强制gc,因为当它发生时,我的代码被冻结了很长时间。其目的是通过定期引起gc来平滑充电。 所列出的解决方案在我的环境中并不强制。
So:
我请求内存临时变量, 简单地,通过增量, 并监视内存并在触发gc时立即停止操作。
它很容易工作,但你必须调整。
Runtime rt = Runtime. getruntime (); double usedMB = (rt.totalMemory() - rt.freeMemory()) / 1024 / 1024; if (usedMB > 1000) //只在必要时使用 { Byte [][] for_nothing = new Byte [10][]; For (int k = 0;K < 10;k + +) For_nothing [k] = new byte[100_000_000]; } system . gc (); .gc Runtime.getRuntime () (); .runFinalization Runtime.getRuntime () ();
如果您能描述一下需要垃圾回收的原因就更好了。如果您正在使用SWT,您可以释放图像和字体等资源来释放内存。例如:
Image img = new Image(Display.getDefault(), 16, 16);
img.dispose();
还有一些工具可以确定未处理的资源。
最好的选择是调用System.gc(),这只是给垃圾收集器一个提示,表明您希望它进行收集。由于垃圾收集器是不确定的,因此没有办法强制和立即回收。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap