String 直接量 超出 65535之后(127KB),IDEA 编译器会报错,因为 直接量是存储在常量池,常量池的定义规定中 有长度限制 2e16 。
String在运行期间的拼接后的最大长度是 int 的最大值 。
StringBuilder 长度是 int 的最大值 2e32 ,21亿 个字符,42亿字节 Byte= 大小4G。
超出长度的需要 用文件流处理,并且及时 清理垃圾对象,腾出足够内存。
OOM优化建议:
1) 最好少使用 String 直接量,因为常量池的内存占用,基本上来讲,很难被清理到。
2)StringBuilder 最好给定 初始长度,避免动态扩容。因为 StringBuilder 内部是 用 char[] 表示的,而同一个数组映射到 磁盘上的存储位置是连续的一块地方。对于java而言,
这样能 保证在 JVM 中的内存占用是连续的块,GC在清理的时候,会 很方便清理一整块地方,而不会有内存碎片的产生。不产生碎片的回收,这样是最好的。
由内存碎片引申出来的建议:
1) 如果已知元素个数,最好指定 容量 。比如 传输给 数据库批处理的参数,预先知道 批处理的总个数,那么最好 手动指定。
List<Object> list = new ArrayList<>(1000000);
jdbcTemplate.batchUpdate("INSERT INTO T_TEST values(?)", list);
发布者:小站,转转请注明出处:http://blog.gzcity.top/4653.html
评论列表(10条)
I don’t think the title of your article matches the content lol. Just kidding, mainly because I had some doubts after reading the article.
Thanks for sharing. I read many of your blog posts, cool, your blog is very good.
аренда яхты до 20 человек в дубай arenda-yahty-dubai.ru
Property in Montenegro Realty Montenegro
grosses baugrundstuck kaufen Montenegro immobilien kaufen
фильмы онлайн HD на телефоне новинки кино онлайн на компьютере
Ulcinj flughafen immobilien Montenegro
Thanks for sharing. I read many of your blog posts, cool, your blog is very good.
taya365 download taya 365
скупка золота советское скупка золота за грамм