I am running my application under a profiler. The 'class' that has the most memory consumption is the 'char[]' which is about 10kB in my application.
I then created an InputStream (PipedInputStream to be exact) which holds a byte array data of 300MB.
Then I took a look at my profiler, and I don't see any significant change ( don't see anywhere that something eats up 300MB).
The question is, if that 300MB of byte array is not in memory, where is java keeping it?
[Update] Additional info on how I got the 300MB to my PipedInputStream:
I am developing a web app that has a file upload mechanism. And in one of the processes in my file upload, I create an input stream (PipedInputStream). Basically,
- I read the multipartfile's input stream (a few KB of byte[] at a time),
- Created a PipedOutputStream
- Created a PipedInputStream ( passing the recently created output stream to the constructor )
- Wrote the multipart's input stream to my PipedOutputStream (running on a separated thread; which flushes and closes that output stream before exiting the thread). At this point, I now have a copy of the multipart's bytes in my own input stream
- Then (accidentally) stored that input stream in my http session (discussion/debate on whether that is a good idea would be on a different question)
So the question then again is, where is Java keeping my InputStream's content (I don't see it anywhere in my profiler)?
[Update#2]
I have a FileOutputStream which reads from the PipedInputStream and writes to a file.