Java Servlet文件上传
我正在使用servlet进行多文件上传(使用ApacheCommonsFileUpload)。我的部分代码发布在下面。我的问题是,如果我一次又一次地上传文件,应用服务器的内存消耗会急剧增加。ApacheTomcat服务器似乎一直保留着内存,并且从不返回内存。堆空间的内存不足。有时它会出现内存不足异常并抛出Java Servlet文件上传,java,web-applications,servlets,heap-memory,apache-commons-fileupload,Java,Web Applications,Servlets,Heap Memory,Apache Commons Fileupload,我正在使用servlet进行多文件上传(使用ApacheCommonsFileUpload)。我的部分代码发布在下面。我的问题是,如果我一次又一次地上传文件,应用服务器的内存消耗会急剧增加。ApacheTomcat服务器似乎一直保留着内存,并且从不返回内存。堆空间的内存不足。有时它会出现内存不足异常并抛出java堆空间错误 我关闭了所有的输入流,我想问题出在ServletFileUpload,有人能帮我关闭它吗 ServletContext context=this.getServletConf
java堆空间错误
我关闭了所有的输入流,我想问题出在ServletFileUpload
,有人能帮我关闭它吗
ServletContext context=this.getServletConfig().getServletContext();
DiskFileItemFactory factory = new DiskFileItemFactory();
FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(context);
factory.setFileCleaningTracker(fileCleaningTracker);
if (isMultiPart) {
upload = new ServletFileUpload(factory);
try {
itr = upload.getItemIterator(request);
while (itr.hasNext()) {
item = itr.next();
if (item.isFormField()) {
...
您使用的是FileCleaningTracker,有些版本的Apache commons FileUpload在该组件中有一个bug(请参见此:) 似乎已经修好了:
因此,请尝试使用最新的可用版本。使用VisualVM连接到JVM,看看占用内存的是什么,我打赌这不会是comons上传的内容。谢谢……您能描述一下DiskFileItemFactory的用法吗,当我创建一个ServletFile上载对象时,没有it@user2535809这在《用户指南》、《流式API》和javadoc中有更好的解释。