zoukankan      html  css  js  c++  java
  • 通过Jvisualvm简单分析一下Java字符串创建

    一、有朋友介绍了jdk自带的查看堆的工具Jvisualvm,还有opl语言,这样能让我很好的查看JVM中的字符串的一个存放的物理地址(区分不同的字符串)如下图:

    二、.所以我在这里将字符串的创建的我能想到的所有可能性都试一遍,这样就能知道字符创到底创建了几个对象,继而再分析分别是在堆中还是常量池中进行创建的

    1.直接创建一个对象,和new一个对象

     我们可以很清楚的看出aa,bb的个数,并且地址相连的可能是在同一位置(常量池?这个建议去看一下其他资料确认,哈哈,我也去看了)

    2.如果说是这样创建

     注意这里我查询了bb和cc,这了bb是没有存在于jvm中的,原因是java程序进行操作的时候,java文件转换成class文件时,编译器自动将“bb”+“cc”  编译成了“bbcc”,但是通过引用进行字符串相加,在编译时期编译器并不知道str1是个啥东西,所以就不能优化了

    3.明明还有其他想法的,但是好像忘记了?哈哈,下次想到了继续补充,反正写了也是给自己看,方便理解的

    以后可能有新的想法了还会继续补充,建议通过字节码文件查看对象创建流程可能会更加的方便

  • 相关阅读:
    Splay复习
    带权并查集复习-HDU3038
    罗素悖论-图灵停机问题
    数独解法c++实现
    状压DP NOI2001 炮兵阵地
    区间第k大数
    分块随笔T2
    分块感想
    webkit的高级属性
    设计模式
  • 原文地址:https://www.cnblogs.com/xzmxddx/p/12720348.html
Copyright © 2011-2022 走看看