专业的JAVA编程教程与资源

网站首页 > java教程 正文

关于StringTable的设置,看这篇文章就够了

temp10 2025-02-28 17:27:54 java教程 10 ℃ 0 评论

前面几节我们讲解了关于java8中String的特性,提到了字符串常量池在创建String对象的过程中所起到的关键作用,同时也提到了字符串字面量和StringTable的概念,以及使用java.lang.String#intern方法将字符串加入字符串常量池的用法。本节我们主要讲解下,如何直观的查看字符串字面量和JVM提供的有关StringTable的虚拟机参数。

一、如何使用命令查看字面量字符串

关于StringTable的设置,看这篇文章就够了

我们知道字符串字面量在编译期间就已经确定了,在类加载器加载类时,将字符串加载到字符串常量池StringTable中,以便运行期复用,所以我们使用以下命令即可查看

javap -verbose Main.class(class文件名)

我们定义如下类并使用上述命令在cmd窗口查看回显结果,我们定义的字面量“abc”已经显示在了Constant pool中。

public class Main {
    public static void main(String[] args) {
        String str1 = "abc";
        System.out.println(str1);
    }
}

二、JVM提供的和SringTable相关的参数有哪些?

JVM未直接提供可以查看运行时StringTable的具体信息的JVMTI,也就是说我们无法知道在运行期间,字符串常量池的具体情况。但官方给出了两个参数-XX:StringTableSize=N和-XX:+
PrintStringTableStatistics,详细介绍如下:

-XX:StringTableSize 
含义:配置字符串常量池中的StringTable大小,默认:60013 (Number of buckets in the interned String table) ,StringTable数据结构是hashtable,这个值就是hashtable的size大小,建议设置成大一点的质数
-XX:+PrintStringTableStatistics  
含义:在JVM进程退出时,打印出StringTable的统计信息输出到gclog中.

这里我们给出一个打印的样例,里面有存储情况的详细信息,感兴趣的可以仔细研读下:

因篇幅限制,这部分知识就介绍到这里,下一节我们将讲解String,StringBuilder和StringBuffer的使用场景和从源码上剖析他们的区别,感兴趣的小伙伴可以关注作者,一起学习交流,谢谢大家!

历史文章链接:

关于String的常见疑问解答

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表