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

相关推荐

  • Intellij IDEA激活码,IDEA稳定专属激活码

    2018.2~2023版本用这个,下面激活码直接复制粘贴到activation code即可激活软件,如果是新的版本,换新激活码的时候code with me也要激活一次 FDXL1Y2811-eyJsaWNlbnNlSWQiOiJGRFhMMVkyODExIiwibGljZW5zZWVOYW1lIjoiQmVub2l0IE1lbmVuZGV6IiwiYXN…

    2023年4月13日
    1.4K800
  • 【Vue学习总结】1.Vue环境搭建、运行第一个项目

    我们来搭建Vue的运行环境,并构建一个官方实例工程运行。 我们登录Vue的官网https://cn.vuejs.org,可以看到Vue的起步按钮,其三个特色也在首页进行了标明: 一、搭建Vue的开发环境 在使用Vue之前,我们首先要搭建Vue的环境,我们点击上面的“起步”按钮,进步基础教程页面: 我们点击左侧树形菜单的“安装”,进入Vue的安装教程页面,一般…

    2022年7月6日
    33030
  • 查看apk安装包的miniSdkVersion、targetSdkVersion

    方式一:命令: aapt list -a *.apk | grep SdkVersion用法例如:显示的结果为16进制,需要自己转换成 10进制。 查看apk安装包的miniSdkVersion、targetSdkVersion 方式二:命令: aapt dump badging .apk如果觉得结果集太长了,可以加grep过滤一下: aapt dump b…

    2022年12月9日
    5.3K13340
  • Git clone代码报“fatal: Out of memory, malloc failed (tried to allocate xxxx bytes)”的解决办法

    问题描述: 之前clone代码的时候一直没问题,今天clone代码的时候突然报错“fatal: Out of memory, malloc failed (tried to allocate 1058576000 bytes)”。 按报错的理解就是本机的内存不足了,查看了本机运行的服务和进程,没有可以停掉的服务和进程,那该怎么办呢? 查询资料都说的是因为GI…

    2023年3月21日
    1.3K1950
  • log4j 0day漏洞情况分析及说明

    一、背景简介 2022年7月30日起,各大威胁情报社区及安全圈内开始盛传log4j存在0day漏洞,由于log4j在去年12月爆出严重的jndi注入漏洞,可通过在特定点插入恶意的jndi payload达到执行任意代码进而控制主机的目的。 log4j2(一般简称log4j)是Apache基金会开发维护的开源java日志组件,在以Java开发的系统中大量被直接…

    2022年8月3日
    22000

发表回复

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

评论列表(10条)