元空间过大与intern方法探究

2023-05-16

1 问题

所负责服务需要保存大量字符串,通过写入大量数据,发现元空间持续变大,于是想到之前每位研发的的建议,使用intern方法来优化字符串存储,于是做了如下的测试。

2 测试intern demo

    public static class Demo {
        String value;
        String key;
    }    

		@Test
    public void testForStringIntern() throws Exception {
        Demo demo1 = new Demo();
        //来自堆
        demo1.value = new String("abc");

        Demo demo2 = new Demo();
        //来自常量池/元空间
        demo2.value = demo1.value.intern();

        Demo demo3 = new Demo();
        //来自常量池/元空间
        demo3.value = new String("abc").intern();

        Demo demo4 = new Demo();
        //来自常量池/元空间
        demo4.value = "abc";

        //来自堆
        Demo demo5 = new Demo();
        demo5.value = new String("abc");

        System.out.println("demo1.value==demo2.value -> " + (demo1.value == demo2.value));
        System.out.println("demo1.value==demo3.value -> " + (demo1.value == demo3.value));
        System.out.println("demo1.value==demo4.value -> " + (demo1.value == demo4.value));
        System.out.println("demo1.value==demo5.value -> " + (demo1.value == demo5.value));
        System.out.println("demo2.value==demo3.value -> " + (demo2.value == demo3.value));
        System.out.println("demo2.value==demo4.value -> " + (demo2.value == demo4.value));
        System.out.println("demo3.value==demo4.value -> " + (demo3.value == demo4.value));
        System.out.println("demo2.value==demo5.value -> " + (demo2.value == demo5.value));
    }

3 官方 intern方法解释

我们通过google翻译,看看官方对于intern方法的解释:

image-20220714200030750

image-20220714200042517

4 总结说明

通过个人单元测试尝试和官方说明可知:

  1. intern操作会将字符串与元空间关联,如果元空间包含该字符串,则直接引用元空间引用,不在占用额外存储空间,如果元空间没有数据,则会创建一个新的实例。
  2. 通常我们接收rest请求、md5摘要等操作产生的字符串,如果他们后续需要持久化,而且大概率会与许多实例维护相同引用,可以通过intern操作,提高存储效率,否则如无特别必要不需要此类操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

元空间过大与intern方法探究 的相关文章

  • Linux提示空间已满,找不到大文件

    当我们发现磁盘快满了 xff0c 然后删除某些服务的日志文件 xff0c 删除后发现磁盘空间仍然被占用 xff0c 但我们使用 du sh 命令 xff0c 发现目录下没有大文件 xff0c 这时我们应该考虑 xff0c 删除日志文件时 x
  • passwd修改用户密码报错

    故障现象 xff1a 1 修改密码时报错 passwd Authentication token manipulation error 2 添加用户报错 xff1a unable to lock password file 分析问题 xff
  • /etc/bashrc、/etc/profile、.bashrc、.bash_profile这几个文件的关系是什么呢?

    我们平时在配置一些环境变量的时候 xff0c 经常会遇到这几个文件的修改 xff0c 有的文档是修改 etc bashrc xff0c 而有的文档则是要求修改 bashrc xff0c 那么这几个文件到底有什么关系呢 xff1f 首先说一下
  • RouterOS系统安装和简单配置

    1 安装RouterOS系统 VMware虚拟机 xff0c 新建一个其他系统的虚拟机 xff0c 类似安装Linux系统 xff0c 挂载系统镜像 xff0c 根据提示一步步完成安装 选择安装的功能包 选择安装的功能包后 xff0c pr
  • nginx-upload-module模块使用

    Nginx是没有该模块的 xff0c 需要重新编译Nginx xff0c 添加nginx upload module模块 下载nginx upload module模块 xff1a https github com fdintino ngi
  • SecureCRT Mac版安装并激活

    先下载SecureCRT和破解文件 默认下载到了当前用户的 下载 目录中 在 Finder 中 打开 scrt 7 3 0 657 osx x64 dmg 并将 SecureCRT复制到 应用程序 中 这时SecureCRT的路径是 App
  • Python 报错 | 导入celery模块报错

    环境 xff1a Python3 7 celery4 1 0 进入python交互环境 xff0c 导入celery模块正常 xff0c 引用Celery的方法报错 xff1a liangkai vm span class token pu
  • yy欢聚时代软件测试笔试题

    1 xff0c 10111001对应的八进制 xff0c 十六进制和十进制 2 xff0c 常见的数据库有那些 xff1f 3 xff0c 常见的协议有哪些 xff1f 4 xff0c 代码运行结果 xff0c c 43 43 题目 xff
  • linux之conntrack连接跟踪

    linux之conntrack连接跟踪 conntrack连接跟踪 连接跟踪 xff08 CONNTRACK xff09 xff0c 顾名思义 xff0c 就是跟踪并且记录连接状态 Linux为每一个经过网络堆栈的数据包 xff0c 生成一
  • mdk arm开启FPU报错问题

    问题描述 xff1a mdk使用arm complier v6 开启FPU报错问题 问题分析 xff1a 如果是使用arm v5版本编译器 xff0c 按照下述步骤进行配置 xff0c 然后编译是没有问题的 xff1a 在C C 43 43
  • linux之yum下载rpm包离线安装conntrack-tools

    如何下载rpm包 xff0c 进行离线安装 文章目录 前言一 yum下载rpm包离线安装方式方法一 使用yum 的 downloadonly 插件下载方法二 使用yumdownloader下载方法三 使用repotrack下载所有依赖 二
  • docker离线安装方法

    docker离线安装方法 下载地址 xff1a https download docker com linux static stable x86 64 参考文档 xff1a https docs docker com engine ins
  • Linux使用chrony让局域网内的服务器时间同步

    Linux使用chrony让局域网内的服务器时间同步 在生产环境经常会因为时间的问题出现过问题 xff0c 例如应用节点和数据存节点时间不一致 xff0c 造成检索不到数据的问题等 在现在不管是公有云 私有云还是混合云等在建设过程中 xff
  • linux将本地库JAR批量导入到Nexus3.x

    linux将本地库JAR批量导入到Nexus3 x 文章目录 linux将本地库JAR批量导入到Nexus3 x1 问题描述2 搭建Nexus私服2 1 官网下载 xff1a 2 2 上传并解压2 3 修改默认端口2 4 修改内存分配 xf
  • 如何下载npm离线安装包

    如何下载npm离线安装包 如何将本地nodejs库 xff0c 放入到nexus的npm库 在代码工程目录使用 npm install 安装 package json 所依赖的文件 xff0c 并依赖下载到 node modules 目录
  • 批量下载npm离线安装包

    批量下载npm离线安装包 上篇讲到如何下载npm离线安装包的几种思路 https blog csdn net xinle0320 article details 124285708 1 批量下载npm离线安装包 三种方式 通过 packag
  • Fiddler抓取Java应用HTTP请求报文

    Fiddler抓取Java应用HTTP请求报文 1 监听Tomcat的http请求报文 在catalina bat添加一行 xff08 proxyPort的值为fiddler端口号 xff09 span class token builti
  • NPM软件包发布到Nexus

    NPM软件包发布到Nexus 文章目录 1 Linux安装nodejs环境2 创建镜像仓库3 添加nexus权限4 设置镜像仓库地址5 发布单个包6 发布tgz包7 批量发布npm包到私有仓库8 查看nexus的npm仓库9 测试 1 Li
  • docker安装minio

    docker安装minio 1 拉取镜像2 查看镜像3 创建目录4 指定控制台端口启动4 查看日志5 登录控制台页面6 Create Bucket7 浏览文件 1 拉取镜像 span class token function docker
  • docker minio设置永久免密下载链接

    docker minio设置永久免密下载链接 上篇 docker安装minio 前言 minio分享文件的链接 xff0c 最多支持分享七天 通过minio client管理存储桶策略的方式实现文件链接永久有效 这样就可以免密搭建个人图片等

随机推荐

  • printf重定向的相关总结

    简介 实现printf重定向有多种方式 xff0c 下面一一介绍 linux环境下 虽然linux系统的默认标准输出设备是显示器 xff0c 但是我们可以把printf打印输出的内容重定向到其他设备或文件 方法如下 xff1a 方法1 xf
  • 安装ES7.x集群

    安装ES集群 文章目录 安装ES集群一 环境准备1 1 准备三台Linux主机1 2 ES集群环境规划1 3 修改 etc hosts 二 下载部署包2 1下载jdk部署包2 2下载ES相关部署包 三 环境安装3 1安装JDK8环境3 1
  • es7.x升级log4j版本

    es7 x升级log4j版本 下载log4j2 18 0 下载地址 xff1a https dlcdn apache org logging log4j 2 18 0 apache log4j 2 18 0 bin tar gz 其他版本
  • 使用logstash迁移ES1.x数据到ES7.x

    使用logstash迁移ES1 x数据到ES7 x tar span class token operator span zxvf logstash span class token operator span span class tok
  • ES创建索引模板设置分片和副本数及时间格式问题

    创建索引模板设置分片和副本及时间格式问题 一 创建索引模板 PUT template event template default span class token punctuation span span class token str
  • es7 扩展词库

    elasticsearch 7 x x 扩展ik分词词库 支持mysql 热部署 https blog csdn net laow1314 article details 124236262 Elasticsearch 7 X Ik源码解读
  • es相关参数优化

    es相关参数优化 生产环境 jvm参数资源可以调整大一些 xff0c 系统的内存的一半给ES服务 xff0c 最大不超过32G xff0c 剩下的资源留给底层Lucene缓冲 xff1b 独立部署ES服务 xff0c 可以使用64G内存的节
  • ROS中rqt_graph报错节点图空白问题

    ROS中rqt graph报错节点图空白问题 我的环境配置 xff1a 1 VM ware虚拟机安装的ubuntu系统20 04 2 ROS版本是noetic 问题如下 xff1a 最近在学习ROS过程中遇到了rqt graph报错的问题
  • ROS中Gazebo无响应解决办法

    标题ROS中Gazebo无响应解决办法 在终端输入gazebo没有反映 xff0c 进行下面两句操作 首先输入下面的代码 gazebo span class token operator span verbose 观察到报错显示原因为有另一
  • 快速平方根倒数算法深度理解

    快速平方根倒数算法深度理解 快速平方根倒数算法是什么 xff1f 简单来说这个算法避开了开方和除法运算快速实现了 y 61 1 x
  • Ubuntu 14.04安装openwrt

    OpenWRT 编译环境搭建 配置编译环境 必须使用非root用户 xff0c ArchLinux需要创建新用户 安装依赖包 Ubuntu 14 04 必选 apt get install asciidoc bash bc binutils
  • MDK debug时出现*** error 65: access violation at

    简介 本文针对的是访问内存权限的问题 xff0c 其他问题暂时不讨论 问题描述 使用mdk arm调试keil工程的时候遇到错误 error 65 access violation at 0xE0042004 no write permis
  • CreateSemaphore函数

    创建或打开命名或未命名的信号量对象 要指定对象的访问掩码 xff0c 请使用CreateSemaphoreEx函数 语法 HANDLE WINAPI CreateSemaphore xff08 In opt LPSECURITY ATTRI
  • 什么是underlay和overlay?

    1 什么是underlay和overlay xff1f 常规解释 xff1a underlay 现实的物理基础层网络设备 数据中心基础转发架构的网络 以太网最初设计的时候就是一个分布式的网络架构 xff0c 没有中心控制节点 xff0c 网
  • 分布式脑裂问题分析

    1 34 脑裂 34 定义 在一个高可用系统中 xff0c 当联系着的节点断开联系时 xff0c 本来为一个整体的系统 xff0c 分裂成两个独立节点 xff0c 两个节点开始争抢共享资源造成系统混乱 数据损坏的现象 xff0c 成为 脑裂
  • idea必备插件01-代码智能补全插件codota

    代码智能补全插件 codota 01 idea插件下载地址 02 codota在线网站 03 codota官方指导 Codota这个插件可以用于代码的智能补全功能 xff0c 它基于百万级github仓库java程序 xff0c 能根据程序
  • 04-spring-boot-resttemplate netty定制使用

    04 spring boot resttemplate netty定制使用 rest template可以使用netty定制的工厂类 Netty4ClientHttpRequestFactory xff0c 完成相关rest接口访问工作 x
  • sshuttle工具简介

    1 sshuttle简介 最近在k8s配置用到shuttle xff0c 只知道公司用它完成远端k8s集群环境网络环境打通环境工作 xff0c 于是决定研究一下它 xff0c 了解这个穷人代理究竟魅力何在 01 github链接 sshut
  • 日志无法打印问题总结

    日志无法打印问题总结 现象 log4j2运行环境可以生成日志 xff0c 但是没有任何打印信息 1 日志无法打印 最近新开发的服务 xff0c k8s容器部署后 xff0c 发现log4j2的日志无法打印 xff0c 定义的日志都生成了相关
  • 元空间过大与intern方法探究

    1 问题 所负责服务需要保存大量字符串 xff0c 通过写入大量数据 xff0c 发现元空间持续变大 xff0c 于是想到之前每位研发的的建议 xff0c 使用intern方法来优化字符串存储 xff0c 于是做了如下的测试 2 测试int