美文网首页
2021-05-16 《Java 核心技术36讲》学习记录五

2021-05-16 《Java 核心技术36讲》学习记录五

作者: _笑口常开 | 来源:发表于2021-05-19 07:21 被阅读0次

    简述

    此文是对 第5讲 | String、StringBuffer、StringBuilder有什么区别? 的学习

    一些知识点/笔记点:

    • String 是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的。
    • 由于 String 的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象
    • StringBuffer 是一个过渡
    • StringBuilder 在 StringBuffer 基础上去掉了线程安全的部分,有效减小了开销。
    • Immutable 类的设计方法,可以参照 学习记录三
    • StringBuffer 的线程安全是通过将数据和方法都套上 synchronized 来保证。
    • StringBuffer 和 StringBuilder 底层都是 利用可修改的(char,JDK 9 以后是 byte)数组
    • 正常使用 String 去创建字符串,而不是使用 StringBuilder, 因为 String 的底层用了 StringBuilder
    (base) Rui-de-Mac:mianshi Xiaorui$ javap -v JavaKeyKnowledge.class 
    Classfile /Users/Xiaorui/Java/JavaSourceLearn/src/com/mianshi/JavaKeyKnowledge.class
      Last modified 2021-5-16; size 492 bytes
      MD5 checksum 7d0154f9564bcda32a66ceac5ec2f33c
      Compiled from "JavaKeyKnowledge.java"
    public class com.mianshi.JavaKeyKnowledge
      minor version: 0
      major version: 52
      flags: ACC_PUBLIC, ACC_SUPER
    Constant pool:
       #1 = Methodref          #9.#18         // java/lang/Object."<init>":()V
       #2 = Class              #19            // java/lang/StringBuilder
       #3 = Methodref          #2.#18         // java/lang/StringBuilder."<init>":()V
       #4 = Methodref          #2.#20         // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
       #5 = String             #21            // aa
       #6 = String             #22            // bb
       #7 = Methodref          #2.#23         // java/lang/StringBuilder.toString:()Ljava/lang/String;
       #8 = Class              #24            // com/mianshi/JavaKeyKnowledge
       #9 = Class              #25            // java/lang/Object
    
    
    • OOM: Out Of Memory
    • 字符串缓存:把常见应用进行堆转储(Dump Heap),然后分析对象组成,会发现平均 25% 的对象是字符串,并且其中约半数是重复的

    相关文章

      网友评论

          本文标题:2021-05-16 《Java 核心技术36讲》学习记录五

          本文链接:https://www.haomeiwen.com/subject/rucejltx.html