Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-从内存中卸载媒体_Java_Video_Memory_Memory Management - Fatal编程技术网

Java-从内存中卸载媒体

Java-从内存中卸载媒体,java,video,memory,memory-management,Java,Video,Memory,Memory Management,我们有一个播放视频文件的JavaFX程序。我们遇到的问题是,当视频文件加载到内存并播放时,在下一个视频文件播放时它不会被卸载。问题是,在播放了一定数量的视频后,内存已满,机器会尖叫着从满内存停止 我们已经尝试构建该程序的64位版本,但没有任何优势。Java默认使用标记扫描类型的垃圾收集器,而不是引用计数垃圾收集器。这意味着,当您删除对旧视频的所有引用时,视频不会从内存中卸载,而是Java运行时在调用垃圾收集器之前等待程序使用了一定量的内存。这些参数在Java命令行上设置,或者在每个平台上默认设置

我们有一个播放视频文件的JavaFX程序。我们遇到的问题是,当视频文件加载到内存并播放时,在下一个视频文件播放时它不会被卸载。问题是,在播放了一定数量的视频后,内存已满,机器会尖叫着从满内存停止


我们已经尝试构建该程序的64位版本,但没有任何优势。

Java默认使用标记扫描类型的垃圾收集器,而不是引用计数垃圾收集器。这意味着,当您删除对旧视频的所有引用时,视频不会从内存中卸载,而是Java运行时在调用垃圾收集器之前等待程序使用了一定量的内存。这些参数在Java命令行上设置,或者在每个平台上默认设置。听起来您的Java垃圾收集参数设置得太高,因此Java在消耗机器中的所有内存之前不会进行垃圾收集

要设置最大内存量,请在运行程序之前将以下内容添加到JAVA_OPTS环境变量中:

-verbose:gc -Xmx1200m 
第一个将告诉您垃圾收集器发生了什么,第二个将设置Java将使用的最大内存量,在本例中为1.2GB。设置为计算机总内存的一小部分,但足够大,以便您可以将视频加载到内存中

你不妨补充一点

-XX:+UseG1GC 
为了降低垃圾收集延迟。这牺牲了一些最终性能,以防止垃圾收集有时延迟10秒。今天的机器速度如此之快,内存如此之大,以至于对于交互式程序,您会注意到垃圾收集延迟,远远超过G1GC造成的任何减速


您还需要确保在加载新视频后立即删除对旧视频的所有引用。否则,如果它有一个可访问的引用,垃圾收集器将不会卸载它。

如果您不向我们显示代码,我们无法帮助您找到错误。