OOM专题-String 和 StringBuilder的最大可用长度是多少

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

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年6月30日 18:33
下一篇 2022年7月5日 10:59

相关推荐

  • 2022年Web前端开发流程和学习路线(详尽版)

    前言 前端侧重于人机交互和用户体验,后端侧重于业务逻辑和大规模数据处理。理论上,面向用户的产品里,所有问题(包括产品、设计、后端、甚至看不见的问题)的表现形式,都会暴露在前端,而只有部分问题(数据问题、计算问题、安全问题等)暴露在后端,这就意味着前端起到了至关重要的承载和连接作用。前端技术的更新日新月异;前端框架的技术选型百家争鸣;视觉审美的潮流不断更替;可…

    2022年7月6日
    98140
  • Java多线程方式快速解析大量文本内容得到pdf链接转换为文本-学习笔记

    Java多线程方式快速解析大量文本内容得到pdf链接转换为文本-学习笔记 解析流程: 1、一个目录里面包含大量多种格式文件;2、从目录中提取txt为后缀的文件路径List;3、根据服务器性能设定多线程处理文本数量;4、txt文本中获取所有的链接;5、通过正则提取后缀为.pdf链接;6、下载pdf文件到本地;7、使用开源工具把pdf转换为txt内容;获取链接正…

    2022年5月2日
    8.6K11820
  • It has been compressed and nested jar files must be stored without compressi

    错误原因 我将xxx.jar包里面的lib目录下的a.jar包,修改后导致了a.jar包的压缩使用了算法,实际只需要存储方式就可以了,如下图: 可以看到算法都是store 解决办法 添加压缩包的时候,算法选择“存储”即可。

    2022年8月17日
    5.0K10190
  • linux selenium 配置安装

    1.进入linux,首先安装谷歌浏览器,如果有的话,这步骤可以直接跳过。 方法: yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm/usr/bin/google-chrome-stable -v //查看/usr/bin/google-…

    学习笔记 2022年10月11日
    948580
  • Java操作SFTP工具类,文件上传下载删除,获取列表目录

    Java操作SFTP工具类,文件上传下载删除,获取列表目录 需要依赖的Maven包 <!– SFTP –> <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>…

    2022年6月1日
    1.4K840

回复 hdrezka

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(56条)