增加Java中的虚拟内存

增加Java中的虚拟内存,java,memory,Java,Memory,我有一个java应用程序,它加载一个1GB的音乐文件来播放,但是由于可用的RAM不多,所以出现了OutofMemory错误。它在小于600 mb的较小文件上工作得非常好(当我将最小和最大可用内存分别设置为512mb和1536mb时也是如此)。我使用的是2GB内存机器 我需要知道我是否可以用我的硬盘代替RAM(由于存储限制)。如果是的话,你能参考一下这些文章吗 我正在使用以下代码来流式播放音乐: DataLine.Info info = new DataLine.Info(Clip.class,

我有一个java应用程序,它加载一个1GB的音乐文件来播放,但是由于可用的RAM不多,所以出现了OutofMemory错误。它在小于600 mb的较小文件上工作得非常好(当我将最小和最大可用内存分别设置为512mb和1536mb时也是如此)。我使用的是2GB内存机器

我需要知道我是否可以用我的硬盘代替RAM(由于存储限制)。如果是的话,你能参考一下这些文章吗

我正在使用以下代码来流式播放音乐:

DataLine.Info info = new DataLine.Info(Clip.class, format, size);
audioStream.read(audio, 0, size);

audioClip = (Clip) AudioSystem.getLine(info);
audioClip.addLineListener(this);
audioClip.open(format, audio, 0, size);

如果我遗漏了什么,请发表评论。

最好是直接播放音乐

从给定的声音文件创建音频输入流: 文件audioFile=新文件(audioFilePath)

获取音频格式并创建数据线。信息对象:

AudioFormat format = audioStream.getFormat();

DataLine.Info info = new DataLine.Info(Clip.class, format);  
获取剪辑:

Clip audioClip = (Clip) AudioSystem.getLine(info);
打开AudioInputStream并开始播放:

audioClip.open(audioStream);

audioClip.start();
关闭并释放获得的资源:

audioClip.close();

audioStream.close();

你可以这样做,它被称为虚拟内存或页面文件

由于您使用的是windows,因此您需要转到:

控制面板--系统和安全--系统--高级系统设置--性能--高级选项卡

然后您应该看到一个用于更改可用虚拟内存量的选项



这有很大的缺点,因为RAM是专门设计的内存,而且速度很快,所以你的硬盘内存不会有同样的性能。从资源的角度来看,更好的选择是流式传输音频,然后以这种方式对其进行操作(如果可以的话)。

为什么不从磁盘流式传输音乐文件,而不是将整个文件加载到RAM中?我已经添加了正在使用的代码。如果我遗漏了什么,请告诉我你在使用Windows或Mac吗?我想我也在使用同样的方法。我甚至尝试在最后关闭流,但它没有帮助,因为当你不确定你的问题是什么时,文件甚至没有得到很难帮助你的播放编辑。似乎剪辑是这个问题的原因。使用SourceDataLine进行回放解决了中提到的问题,没有任何区别。我认为我的代码在其他地方有漏洞。不过,我有一个问题。当我加载1 GB文件以在应用程序中播放时。它是在RAM上运行还是在虚拟内存上运行?@lakshay它可能在您的RAM上运行,因为您没有看到性能的变化。您正在使用IDE吗?如果是这样的话,那么你可以用谷歌搜索如何允许在IDE上运行程序时使用更多的内存。例如,在Eclipse中,您可以运行配置,然后更改VM参数。您可以将
-Xmx2048M
放入VM参数中以允许更多堆空间。尝试过了。文件被播放,但播放不正确。文件的1秒播放时间约为5秒。
audioClip.close();

audioStream.close();