打字猴:1.70044513e+09
1700445130
1700445131 long heapMaxSize=rt.maxMemory()>>20;
1700445132
1700445133 sb.append(“最大可用内存:”+heapMaxSize+“M\n”);
1700445134
1700445135 long total=rt.totalMemory()>>20;
1700445136
1700445137 sb.append(“对内存大小:”+total+“M\n”);
1700445138
1700445139 long free=rt.freeMemory()>>20;
1700445140
1700445141 sb.append(“空闲内存:”+free+“M”);
1700445142
1700445143 System.out.println(sb);
1700445144
1700445145 }
1700445146
1700445147 });
1700445148
1700445149 //放入近40万键值对
1700445150
1700445151 for(int i=0;i<393217;i++){
1700445152
1700445153 map.put(“key”+i,“vlaue”+i);
1700445154
1700445155 }
1700445156
1700445157 }
1700445158
1700445159 该程序只是向Map中放入了近40万个键值对元素(不是整40万个,而是393217个,为什么呢?请继续往后看),只是增加,没有任何其他操作。想想看,会出现什么问题?内存溢出?运行结果如下所示:
1700445160
1700445161 Exception in thread”main”最大可用内存:63M
1700445162
1700445163 java.lang.OutOfMemoryError:Java heap space
1700445164
1700445165 at java.util.HashMap.resize(HashMap.java:462)
1700445166
1700445167 at java.util.HashMap.addEntry(HashMap.java:755)
1700445168
1700445169 at java.util.HashMap.put(HashMap.java:385)
1700445170
1700445171 at Client.main(Client.java:24)
1700445172
1700445173 对内存大小:63M
1700445174
1700445175 空闲内存:7M
1700445176
1700445177 内存溢出了!可能会有读者说,这很好解决,在运行时增加“-Xmx”参数设置内存大小即可。这确实可以,不过浮于表面了,没有真正从溢出的最根本原因上来解决问题。
1700445178
1700445179 难道是String字符串太多了?不对呀,字符串对象加起来撑死也就10MB,而且这里还空闲了7MB内存,不应该报内存溢出呀?
[ 上一页 ]  [ :1.70044513e+09 ]  [ 下一页 ]