我在探查器下运行我的应用程序。内存消耗最多的“类”char[]
在我的应用程序中约为 10 kB。
然后我创建了一个InputStream
(PipedInputStream
确切地说),它包含一个 300 MB 的字节数组数据。
然后我看了一下我的分析器,我没有看到任何显着的变化(看不到任何东西占用了 300 MB)。
问题是,如果 300 MB 的字节数组不在内存中,Java 将它保存在哪里?
[更新]
关于我如何获得 300 MB 的附加信息PipedInputStream
:
我正在开发一个具有文件上传机制的网络应用程序。在文件上传的其中一个过程中,我创建了一个输入流 ( PipedInputStream
)。基本上,
- 我读取了多部分文件的输入流(一次几 KB 字节 []),
- 创建了一个
PipedOutputStream
- 创建了一个
PipedInputStream
(将最近创建的输出流传递给构造函数) - 将多部分的输入流写入我的
PipedOutputStream
(在单独的线程上运行;在退出线程之前刷新并关闭该输出流)。此时,我现在在自己的输入流中拥有了多部分字节的副本 - 然后(意外地)将该输入流存储在我的 http 会话中(关于这是否是一个好主意的讨论/辩论将是另一个问题)
那么问题又来了,Java 将我InputStream
的内容保存在哪里(我在分析器中的任何地方都看不到它)?
[更新#2]
我有一个从文件FileOutputStream
中读取PipedInputStream
并写入文件的文件。