java 内存溢出陷阱

tomcat - reload
tomcat可以不重启对一个工程进行reload, 但由于源代码和class都是存放PermGen区的, reload时并不会对旧的class卸载, 所以, perm会一起增加, 多reload几次就会perm溢出


String - substring
String的substring方法内部额个final char[], 所以, substring产生的字符串是没办法回收的,
而这个方法使用很广范, split也是依赖这个方法的, 如果你是通过一个1m的字符串里, 截取里面的4byte的话., 那么, 这个对象的内存占用虽然为4byte, 但回收内存实际为1m, 而这1m, 在这个对象活动期间是一直占坑的
常见场景, 一个全局Map<String, String> map, 里面的String大量通过substring生成

猜你喜欢

转载自mocha-c-163-com.iteye.com/blog/2266687
今日推荐