Har*_*nto 4 java javafx webview
我试图在JavaFX中使用webview来创建UI,但是有一个问题,当使用弹出窗口打开大图像时,内存使用量非常大,当弹出窗口关闭时,内存使用量不会下降,我看到通过Windows中的任务管理器使用内存,
当使用webview打开大小约为8MB的图像时,内存在使用中达到了300MB,我不明白为什么它这么大,
我试过了
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
webengine.load(null);
}
});
Run Code Online (Sandbox Code Playgroud)
但仍然,不要释放内存
可能,您看到一个RT-33729 WebView实例泄漏了WCImgDecoderImpl实例,目前针对Java 8u20进行了修复.在RT-33729中,开发人员(Leonid Popov)写道:
Webkit具有用于网页的资源缓存,包括图像.它继续保留未使用("死")资源,即使它们不再被引用,以防用户按下"返回"以避免加载已经加载的资源,同时它们不会保留太多的堆空间.请参阅Webkit源代码中的注释中的详细信息:
http://trac.webkit.org/browser/trunk/Source/WebCore/loader/cache/MemoryCache.h
WCImgDecoderImpl的实例通过JNI引用,由BitSource引用,BitmapImage由存储在MemoryCache中的CachedImage引用.我通过修改缓存来测试它,以便它完全扫除其缓存的资源,并观察到所有WCImgDecoderImpl已经消失.虽然可以从WebKit本机代码访问WCImgDecoderImpl的实例,但它并非无用.关键是WebKit通过JNI来规范WCImgDecoderImpl的生命周期.调查如何在WebView删除时强行刷新此缓存仍在继续.
从描述谈论测试应用程序.从场景中删除WebView时,它不会立即被删除(因此它不会释放任何资源).相反,它有一个在处理程序线程(类似于AWT使用的线程)注册的处理程序,它应该在特定时间内调用它并导致WebEngine使用本机资源释放.
另外,我建议在删除WebView之前导航到"about:blank"; 它会立即释放一些资源.
但是,也许你看到的完全是另一回事,我不能告诉你确切,如什么导致RT-35262 JVM崩溃归因于的WebView内存泄漏/ Webkit的,也是由于对Java 8u20或解决RT-34630的WebView内存分配JavaScript回调时泄漏,因为Java 9已解决.
| 归档时间: |
|
| 查看次数: |
5083 次 |
| 最近记录: |