jvm总结

Posted chxwkx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm总结相关的知识,希望对你有一定的参考价值。

总结工作中遇到的JVM知识

不定期更新

 1.有关创建字符串时到底创建几个对象,创建的字符串引用比较。

 

    public static void stringTest() {
        //创建两个变量,一个放入常量池中的"abc",一个是堆中的a
        String a = new String("abc");
        //创建一个对象,堆中的b
        String b = new String("abc");
        //直接拷贝的常量池中的"abc"对象,所以没有创建
        String c = "abc";
        //同上
        String d = "abc";
        
        //说明不是从常量池中取得的对象a=="abc" false
        System.out.println("a=="abc" " + (a=="abc"));
        //说明new一个String()总会(最少)创建一个新的对象a==c false
        System.out.println("a==c " + (a==c));
        //说明,即便有new过相同的字符串,也不会把常量池的引用拷贝过来,new就是创建新的对象b=="abc" false
        System.out.println("b=="abc" " + (b=="abc"));
        //同上b==c false
        System.out.println("b==c " + (b==c));
        //说明也不会将已经存在的常量池的引用拷贝过来b==a false
        System.out.println("b==a " + (b==a));
        //直接赋值的情况下,是将常量池的引用拷贝过来c==d true
        System.out.println("c==d " + (d==c));
        //同一个引用c=="abc" true
        System.out.println("c=="abc" " + (c=="abc"));
        /**
         * 在java中,堆保存对象,栈保存相应的数据。所以可以看出,String a = new String("abc");是创建了两个对象的,一个是"abc",保存在常量池中。
         * 一个是a引用。而后面的String b = new String("abc");其实只创建了一个对象,"abc"已经存在常量池了,就没有创建,只创建了一个b
         */
    }

 

以上是关于jvm总结的主要内容,如果未能解决你的问题,请参考以下文章

python常用代码片段总结

BootStrap有用代码片段(持续总结)

JVM总结:晚期(运行期)优化

BootStrap实用代码片段(持续总结)

回归 | js实用代码片段的封装与总结(持续更新中...)

分析定位占用CPU资源高的JVM线程