che*_*tan 48 java eclipse exception-handling
try {
// CompareRecord record = new CompareRecord();
Connection conn = new CompareRecord().getConection("eliteddaprd","eliteddaprd","192.168.14.104","1521");
ResultSet res = null;
if (conn != null){
Statement stmt = conn.createStatement();
res = stmt.executeQuery("select rowindx,ADDRLINE1 from dedupinitial order by rowindx");
}
Map<Integer,String> adddressMap = new LinkedHashMap<Integer, String>();
if (res != null){
System.out.println("result set is not null ");
while(res.next()){
adddressMap.put(res.getInt(1),res.getString(2));
}
}
System.out.println("address Map size =========> "+adddressMap.size());
Iterator it = adddressMap.entrySet().iterator();
int count = 0;
int min = 0;
while (it.hasNext()){
Map.Entry pairs = (Map.Entry)it.next();
Pattern p = Pattern.compile("[,\\s]+");
Integer outerkey = (Integer)pairs.getKey();
String outerValue = (String)pairs.getValue();
//System.out.println("outer Value ======> "+outerValue);
String[] outerresult = p.split(outerValue);
Map.Entry pairs2 = null;
count++;
List<Integer> dupList = new ArrayList<Integer>();
Iterator innerit = adddressMap.entrySet().iterator();
boolean first = true;
while (innerit.hasNext()){
//System.out.println("count value ===> "+count);
int totmatch = 0;
if(first){
if(count == adddressMap.size()){
break;
}
for(int i=0;i<=count;i++){
pairs2 = (Map.Entry)innerit.next();
}
first = false;
}
else{
pairs2 = (Map.Entry)innerit.next();
}
Integer innterKey = (Integer)pairs2.getKey();
String innerValue = (String)pairs2.getValue();
//System.out.println("innrer value "+innerValue);
String[] innerresult = p.split(innerValue);
for(int j=0;j<outerresult.length;j++){
for(int k=0;k<innerresult.length;k++){
if(outerresult[j].equalsIgnoreCase(innerresult[k])){
//System.out.println(outerresult[j]+" Match With "+innerresult[k]);
totmatch++;
break;
}
}
}
min = Math.min(outerresult.length, innerresult.length);
if(min != 0 && ((totmatch*100)/min) > 50) {
//System.out.println("maching inner key =========> "+innterKey);
dupList.add(innterKey);
}
}
//System.out.println("Duplilcate List Sisze ===================> "+dupList.size()+" "+outerkey);
}
System.out.println("End =========> "+new Date());
}
catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这里ResultSet已经处理了大约500000条记录,但它会给我一个错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.resize(HashMap.java:508)
at java.util.LinkedHashMap.addEntry(LinkedHashMap.java:406)
at java.util.HashMap.put(HashMap.java:431)
at spite.CompareRecord.main(CompareRecord.java:91)
Run Code Online (Sandbox Code Playgroud)
我知道这个错误是因为VM内存,但不知道如何在Eclipse中增加它?
如果我必须处理超过500,000条记录,该怎么办?
Pau*_*ett 149
在Run-> Run Configuration中,找到您正在运行的类的Name,选择它,单击Arguments选项卡,然后添加:
-Xms512M -Xmx1524M
到VM Arguments部分
Swa*_*ika 40
在Eclipse下载文件夹中,输入文件中的条目eclipse.ini:
--launcher.XXMaxPermSize
512M
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms512m
-Xmx1024m
Run Code Online (Sandbox Code Playgroud)
或者你想要的东西.
请参见http://blog.headius.com/2009/01/my-favorite-hotspot-jvm-flags.html
-Xms和-Xmx设置堆的最小和最大大小.作为一项功能,Hotspot限制了堆大小,以防止它吹灭你的系统.因此,一旦你弄清楚应用程序需要的最大内存,你就可以限制它以防止恶意代码影响其他应用程序.使用这些标志,如-Xmx512M,其中M代表MB.如果不包含它,则指定字节.几个标志使用这种格式.您还可以通过设置最小值更高来获得次要启动性提升,因为它不必立即增加堆.
-XX:MaxPermSize = ### M设置最大"永久代"大小.Hotspot是不寻常的,因为几种类型的数据存储在"永久代"中,这是堆的一个单独的区域,很少(或从不)被垃圾收集.perm-gen托管数据列表有点模糊,但它通常包含类元数据,字节码,实习字符串等内容(这在Hotspot版本中肯定会有所不同).因为很少或从未收集过这一代,你可能需要增加它的大小(或者用其他几个标志打开perm-gen扫描).在JRuby中,我们生成了很多适配器字节码,通常需要更多的perm gen空间.
从Eclipse运行时如何为程序提供更多内存
转到运行/运行配置.选择程序的运行配置.单击"参数"选项卡.在"程序参数"区域中,添加一个-Xmx参数,例如-Xmx2048m,为程序提供最大值.2048 MB(2 GB)内存.
如何防止这种记忆问题
重新编写程序,使其不需要在内存中存储如此多的数据.我没有详细查看过您的代码,但看起来您正在存储大量数据HashMap; 当你拥有大量记录时,它不仅仅适合记忆.