大虾们,小弟有个问题请教各位。希望大家积极发言,呵呵。保证给分啊。
小弟现在用Jdom作XML的解析,服务器端需要同时起10个线程,每个线程要生成一个10M大的XML文件。这些文件的内容是从数据库中读出来的,先将数据从数据库中取出来再写进XML文件中。
问题是每次起10个线程生成文件总有2个线程生成失败,原因是服务器内存溢出。
各位,请问有什么好的办法来调优啊。听说用SAX解析XML效率要高些,但是小弟不会啊。谁能给小弟一个用SAX解析XML的一个简单例子(读XML文件个写XML文件的)。
小弟,在此先谢谢各位了!
小弟现在用Jdom作XML的解析,服务器端需要同时起10个线程,每个线程要生成一个10M大的XML文件。这些文件的内容是从数据库中读出来的,先将数据从数据库中取出来再写进XML文件中。
问题是每次起10个线程生成文件总有2个线程生成失败,原因是服务器内存溢出。
各位,请问有什么好的办法来调优啊。听说用SAX解析XML效率要高些,但是小弟不会啊。谁能给小弟一个用SAX解析XML的一个简单例子(读XML文件个写XML文件的)。
小弟,在此先谢谢各位了!
解决方案 »
- java 布局实现困难
- ldap数据库访问问题
- 这个题目让我有点晕!
- 一个很奇怪的问题!!!!1
- 内隐类问题:为什么static inner class 可以被置于interface之中?
- 我用jcreator写的java文件,在其下能编译执行,而类文件在dos下能编译不能运行,错误提示:"Exception in thread "main" java.lang.NoClas
- petstore1.3.1_02在weblogic上怎么安装阿,运行setup.bat说路径不对,不会做个程序安装都这么麻烦吧
- 怎样实现汉字的拼音首字母查询!(在线等待)
- 为感谢computersim在大力相助,特奉送100分,快来拿啊
- 向用AXIS的朋友请教: deploy web service with wsdd error
- 如何用反射读取静态字段的值
- 如何覆盖Hashcode
import java.io.*;import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.ext.LexicalHandler;import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;public class Echo12 extends DefaultHandler
implements LexicalHandler
{
public static void main(String argv[])
{
if (argv.length != 1) {
System.err.println("Usage: cmd filename");
System.exit(1);
}
// Use an instance of ourselves as the SAX event handler
Echo12 handler = new Echo12();
// Use the validating parser
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
//factory.setNamespaceAware(true);
try {
// Set up output stream
out = new OutputStreamWriter(System.out, "UTF8"); // Parse the input
SAXParser saxParser = factory.newSAXParser();
XMLReader xmlReader = saxParser.getXMLReader();
xmlReader.setProperty(
"http://xml.org/sax/properties/lexical-handler",
handler
);
saxParser.parse( new File(argv[0]), handler); } catch (SAXParseException spe) {
// Error generated by the parser
System.out.println("\n** Parsing error"
+ ", line " + spe.getLineNumber()
+ ", uri " + spe.getSystemId());
System.out.println(" " + spe.getMessage() ); // Use the contained exception, if any
Exception x = spe;
if (spe.getException() != null)
x = spe.getException();
x.printStackTrace(); } catch (SAXException sxe) {
// Error generated by this application
// (or a parser-initialization error)
Exception x = sxe;
if (sxe.getException() != null)
x = sxe.getException();
x.printStackTrace(); } catch (ParserConfigurationException pce) {
// Parser with specified options can't be built
pce.printStackTrace(); } catch (IOException ioe) {
// I/O error
ioe.printStackTrace();
} System.exit(0);
} static private Writer out;
private String indentString = " "; // Amount to indent
private int indentLevel = 0; public void setDocumentLocator(Locator l)
{
// Save this to resolve relative URIs or to give diagnostics.
try {
out.write("LOCATOR");
out.write("\n SYS ID: " + l.getSystemId() );
out.flush();
} catch (IOException e) {
// Ignore errors
}
} public void startDocument()
throws SAXException
{
nl();
nl();
emit("START DOCUMENT");
nl();
emit("<?xml version='1.0' encoding='UTF-8'?>");
} public void endDocument()
throws SAXException
{
nl(); emit("END DOCUMENT");
try {
nl();
out.flush();
} catch (IOException e) {
throw new SAXException("I/O error", e);
}
} public void startElement(String namespaceURI,
String lName, // local name
String qName, // qualified name
Attributes attrs)
throws SAXException
{
indentLevel++;
nl(); emit("ELEMENT: ");
String eName = lName; // element name
if ("".equals(eName)) eName = qName; // namespaceAware = false
emit("<"+eName);
if (attrs != null) {
for (int i = 0; i < attrs.getLength(); i++) {
String aName = attrs.getLocalName(i); // Attr name
if ("".equals(aName)) aName = attrs.getQName(i);
nl();
emit(" ATTR: ");
emit(aName);
emit("\t\"");
emit(attrs.getValue(i));
emit("\"");
}
}
if (attrs.getLength() > 0) nl();
emit(">");
} public void endElement(String namespaceURI,
String sName, // simple name
String qName // qualified name
)
throws SAXException
{
nl();
emit("END_ELM: ");
emit("</"+sName+">");
indentLevel--;
} public void characters(char buf[], int offset, int len)
throws SAXException
{
nl(); emit("CHARS: ");
String s = new String(buf, offset, len);
if (!s.trim().equals("")) emit(s);
} public void ignorableWhitespace(char buf[], int offset, int len)
throws SAXException
{
// Ignore it
} public void processingInstruction(String target, String data)
throws SAXException
{
nl();
emit("PROCESS: ");
emit("<?"+target+" "+data+"?>");
} //===========================================================
// SAX ErrorHandler methods
//=========================================================== // treat validation errors as fatal
public void error(SAXParseException e)
throws SAXParseException
{
throw e;
} // dump warnings too
public void warning(SAXParseException err)
throws SAXParseException
{
System.out.println("** Warning"
+ ", line " + err.getLineNumber()
+ ", uri " + err.getSystemId());
System.out.println(" " + err.getMessage());
} //===========================================================
// LexicalEventListener methods
//===========================================================
public void comment(char[] ch, int start, int length)
throws SAXException
{
} public void startCDATA()
throws SAXException
{
nl(); emit("START CDATA SECTION");
} public void endCDATA()
throws SAXException
{
nl(); emit("END CDATA SECTION");
} public void startEntity(java.lang.String name)
throws SAXException
{
nl(); emit("START ENTITY: "+name);
} public void endEntity(java.lang.String name)
throws SAXException
{
nl(); emit("END ENTITY: "+name);
}
public void startDTD(String name, String publicId, String systemId)
throws SAXException
{
nl(); emit("START DTD: "+name
+"\n publicId=" + publicId
+"\n systemId=" + systemId);
}
public void endDTD()
throws SAXException
{
nl(); emit("END DTD");
} //===========================================================
// Utility Methods ...
//=========================================================== // Wrap I/O exceptions in SAX exceptions, to
// suit handler signature requirements
private void emit(String s)
throws SAXException
{
try {
out.write(s);
out.flush();
} catch (IOException e) {
throw new SAXException("I/O error", e);
}
} // Start a new line
// and indent the next line appropriately
private void nl()
throws SAXException
{
String lineEnd = System.getProperty("line.separator");
try {
out.write(lineEnd);
for (int i=0; i < indentLevel; i++) out.write(indentString);
} catch (IOException e) {
throw new SAXException("I/O error", e);
}
}
}
http://java.sun.com/webservices/jaxp/dist/1.1/docs/tutorial/