我们系统用jspsmart.jar上传东西时出现了内存泄漏,在网上查了之前有兄弟碰过这种情况,我现在想把 SmartUpload.java 里面的一个数组释放,因为它是万恶之源m_totalBytes = m_request.getContentLength();
m_binArray = new byte[m_totalBytes];因为我是反编译的 jspsmart.jar ,现在想修改其中的一个类,问下怎么修改?因为没有源JAVA代码谢谢!

解决方案 »

  1.   

    jspsmart的上传机制是将整个文件读入内存,文件较大时很容易引起内存泄漏
    把反编译的类文件需要修改的地方改动后,确保此文件可以编译通过
    然后将jspsmart.jar用解包,可是使用rar,将修改并编译通过的文件放置到对应包结构的目录中替换原来的文件,然后使用jar工具重新打包
      

  2.   

    用反编译软件打开class 改了就行了压缩软件会提示你是否更新当前的文件重新压缩
      

  3.   

    我现在只有JAR包,如果修改其中的一个类,我现在只能是反编译后再修改,怎么去编译啊?谢谢!
      

  4.   


    用反编译软件打开的是java文件啊,改了后怎么编译成class呢?谢谢。
      

  5.   

    不知道你用的是么反编译工具,推荐JD,可以将整个包反编译后保存为source,jspsmart依赖
    jsp-api.jar和servlet-api.jar包,eclipse中价格java project,导入源码,然后编译
      

  6.   

    java有自带的gc
    第一感觉清理那个数组不起作用
    你不如找找有没有static的一些容器引用
    这些最可能引起内存泄漏了
      

  7.   

    就是我上面说的,你上传的文件太大了,jspsmart将文件全部读入内存,很容易导致内存泄漏,jspsmart适合上传50M以下大小的文件。要尝试大文件上传,请用common-fileupload.jar
      

  8.   

    建议不要使用:jspsmart 因为这个已经停止开发了。
    本身就有问题,所以实现不了内存不泄漏的问题。
    建议使用common-fileupload.jar这个不会泄露,而且支持超大文件上传。