-
java解析xml文件多个线程同时访问时内存溢出25
java解析xml文件多个线程同时访问时内存溢出,代码如下:
解析的xml文件大小大概2M-10M,该怎么解决呢?
String sourceFile = ConfigReader.get("data.store.path") + article.getSourceFile(); org.dom4j.Document document = null; FileInputStream fin = null; try { fin = new FileInputStream(new File(sourceFile)); document = new SAXReader().read(fin); } catch (final FileNotFoundException e) { final String msg = "内容单元xml文件不存在:" + sourceFile; log.error(msg, e); throw new RuntimeException(msg, e); } catch (final DocumentException e) { final String msg = "解析内容单元xml文件失败:" + sourceFile; log.error(msg, e); throw new RuntimeException(msg, e); } finally { IOUtils.closeQuietly(fin); } final StringBuilder xpath = new StringBuilder("/KFMP/DOCS/DOC[@GUID='") .append(article.getGuid()).append("']/").append("CONTENT"); final Node node = document.selectSingleNode(xpath.toString()); final String value = node.getText(); article.setContent(value); final StringBuilder coordXpath = new StringBuilder("/KFMP/DOCS/DOC[@GUID='") .append(article.getGuid()).append("']/").append("COORDS"); final Node coordsNode = document.selectSingleNode(coordXpath.toString()); final String coordsValue = coordsNode.getText(); article.setCoords(coordsValue); final StringBuilder briefXpath = new StringBuilder("/KFMP/DOCS/DOC[@GUID='") .append(article.getGuid()).append("']/").append("BRIEF"); final Node briefNode = document.selectSingleNode(briefXpath.toString()); final String briefValue = briefNode.getText(); article.setBrief(briefValue); return article;
问题补充:加大了,一样会溢出。我在做简单的压力测试,10个线程就基本不会出问题,30个很快就会线程阻塞了。<div class="quote_title">kidding87 写道</div><div class="quote_div">加大XMX,32位的最大只能用1.5G <br /></div> <br />
问题补充:xml文件时原始文件不能修改。<div class="quote_title">mavlarn 写道</div><div class="quote_div">每次一个document初始化好以后,放到一个map里,文件名作为key,用的时候,先看看map里面有没有,没有再初始化一个document,这样保证每一个xml文件只生成一个document对象。 <br /> <br />如果这样都会溢出,那就是你的xml文件太大了,设计不合理,试着拆成多个小文件。</div> <br />
问题补充:我尝试不从xml文件里面读信息了,谢谢啦!<div class="quote_title">mavlarn 写道</div><div class="quote_div">每次一个document初始化好以后,放到一个map里,文件名作为key,用的时候,先看看map里面有没有,没有再初始化一个document,这样保证每一个xml文件只生成一个document对象。 <br /> <br />如果这样都会溢出,那就是你的xml文件太大了,设计不合理,试着拆成多个小文件。</div> <br />2012年3月27日 15:24
相关推荐
JCA(Java Core Analysis)工具则是一款专门用来解析和分析javacore文件的工具,它能够帮助开发者深入理解内存溢出的问题,找出可能的内存泄露源,以及线程阻塞等问题。JCA401可能是该工具的一个特定版本,具有特定...
4. **异步处理**: 考虑使用多线程或异步处理,将解析任务分解为更小的部分,以便同时处理多个数据块,提升整体效率。 5. **避免计算和格式化**: 在读取数据时,尽可能避免计算和格式化操作,因为这些操作会消耗额外...
通过JDOM,我们可以解析XML文件,创建XML文档对象,然后对这些对象进行修改或查询。例如,可以使用`SAXBuilder`读取XML文件,然后通过`Document`对象获取XML的元素和属性。同时,JDOM也支持写入XML,通过`...
传统的处理方式可能会导致内存溢出(OOM)的问题,特别是在读取或写入超大数据量的Excel文件时。 **需求分析:** - **高效处理:** 需要一种能够高效读取和写入大量Excel数据的技术方案。 - **内存友好:** 避免在...
6. **多线程处理**:如果文件太大,可以考虑将文件分割成多个部分,然后使用多线程并发读取,以提高整体处理效率。但要注意线程安全问题,避免数据冲突。 7. **数据库存储**:如果需要长期保存和快速访问大量数据,...
在处理大型XML文件时,由于文件的体积庞大,一次性加载到内存可能会导致内存溢出,因此需要采取分批读取的策略。`parseUtil`源码正是为了解决这一问题而设计的,它是一个用于高效解析大型XML文件的工具类。下面我们...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。在处理大文件时,DOM4J结合XPath的使用,可以有效地管理和分析大量数据。在这个场景下,描述...
而“多线程爬虫”则是在单个爬虫的基础上,利用多线程技术同时处理多个任务,提高了数据抓取的速度和效率。 Java作为一门强大的编程语言,以其跨平台性和丰富的类库支持,成为开发爬虫的理想选择。基于Java的多线程...
在处理文件时,还需要注意文件权限、并发访问和异常处理。确保在完成操作后正确关闭流,以避免资源泄漏。在多线程环境中,同步访问文件以防止数据冲突。 最后,对于复杂的文件操作,例如解析XML或JSON,Java还提供...
jca37对javacore文件的解析能力强大,可以清晰地展示每个线程的状态,帮助开发者理解程序运行时的上下文,尤其是在多线程环境下,能有效识别死锁、线程阻塞等问题。 在使用jca37之前,我们需要了解如何生成和收集...
本篇文章将深入探讨如何使用Java高效地通过替换Sheet方式来导出Excel 2007文件,并重点解析提供的三个核心类:AbstractExcel2007Writer.java、Excel2007WriterImpl.java和XMLEncoder.java。 首先,我们关注“替换...
1. 使用多线程并行处理多个sheet或部分数据。 2. 将数据分块读取,每次只处理一部分,减少内存峰值。 3. 在读取数据时,尽可能延迟计算,直到真正需要数据时再进行处理。 4. 如果数据存储允许,可以考虑先将Excel...
同时,避免一次性加载整个文件到内存,而是分块读写,以防止内存溢出。 8. **多线程处理**: 如果文件操作耗时较长,可以考虑使用多线程来避免阻塞UI。在后台线程中执行文件操作,通过事件或进度条通知用户操作...
在Java开发中,分页和上传下载是两个重要的功能,特别是在构建Web应用程序时。下面将分别详细介绍这两个主题。 首先,让我们来谈谈Java中的分页。分页主要用于处理大数据集,防止一次性加载所有数据导致内存溢出或...
- 多线程处理多个上传请求以提高并发性。 总结,Java文件上传涉及到Web开发中的多种技术和最佳实践。理解Servlet API、使用像Commons FileUpload这样的库、实现安全的文件存储策略以及处理可能的错误,都是成功...
1. `src/main/java`: 这里存放Java源代码,可能包括一个或多个包,每个包下有对应的类文件,用于实现Excel文件的读取、过滤逻辑和可能的UI界面。 2. `src/main/resources`: 可能包含配置文件,如数据库连接信息、...
6. **并发处理**:如果服务器资源允许,可以考虑并行处理多个批次,进一步提高导出速度。例如,使用多线程或异步任务来并行导出不同的数据块。 7. **错误处理与进度显示**:在实际应用中,需要添加适当的错误处理...
线程同步是为了避免多个线程同时访问临界资源导致的数据不一致问题。实现线程同步的主要方法有: - 使用`synchronized`关键字,可以作用于方法或代码块,确保同一时刻只有一个线程可以执行。 - 使用`ReentrantLock`...
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概...