我在分析器下运行我的应用程序。具有最大内存消耗的“类”是char[]
,在我的应用程序中大约为10 kB。
然后我创建了一个InputStream
(确切地说PipedInputStream
),它保存了300 MB的字节数组数据。
然后我看了一下我的探查器,我没有看到任何重大变化(看不到任何东西吃300 MB的东西)。
问题是,如果300 MB的字节数组不在内存中,Java保存在哪里?
[更新]
有关我如何获得300 MB到PipedInputStream
的其他信息:
我正在开发一个具有文件上传机制的Web应用程序。
在我上传文件的其中一个过程中,我创建了一个输入流(PipedInputStream
)。基本上,
PipedOutputStream
PipedInputStream
(将最近创建的输出流传递给构造函数)PipedOutputStream
(在一个单独的线程上运行;在退出线程之前刷新并关闭该输出流)。 此时,我现在在我自己的输入流中有一个多部分字节的副本 那么接下来的问题是,Java在哪里保留我的InputStream
内容(我在我的探查器中没有看到它)?
[更新#2]
我有FileOutputStream
从PipedInputStream
读取并写入文件。
答案 0 :(得分:2)
当PipedInputStream
由连接到的输出流写入时,它只是使数据可用。只要您从输入流中继续读取输入流中的数据,就不会有太多数据需要缓冲。
如果这没有帮助,您需要提供有关您使用管道输入流做什么的更多信息 - 它连接到哪个输出流,以及从中读取什么?
编辑:您还没有说出PipedInputStream
的内容。必须有的东西,否则PipedOutputStream
会阻止 - PipedInputStream
只有一个相当小的缓冲区(默认情况下)。
答案 1 :(得分:0)
PipedInputStream
根本不存储任何数据。另外,从哪里获得300 MB字节数组?