JVM08_字符串常量池基本特性、内存分配、拼接操作、intern、StringTable垃圾回收(一)

简介: ①. String的基本特性②. String的内存分配

①. String的基本特性


①. String:字符串,使用一对""引起来表示。


String sl = “hello”;//字面量的定义方式


String s2 = new String(“hello”)


②. String声明为final的,不可被继承


③. String实现了Serializable接口:表示字符串是支持序列化的。 实现了Comparable接口:表示String可以比较大小


④. String在jdk8及以前内部定义了final char[ ],value用于存储字符串数据。jdk9时改为byte[ ]


  public final class String implements 
  java.io.Serializable, Comparable<String>,CharSequence {
  @Stable
  private final byte[] value;
  }


⑤. String:代表不可变的字符序列。简称:不可变性。


⑥. 通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中


⑦. 字符串常量池中是不会存储相同内容的字符串的


String的String Pool 是一个固定大小的Hashtable,默认值大小长度是1009。如果放进


StringPool的String非常多, 就会造成Hash冲突严重,从而导致链表会很长,而链表长


了后直接会造成的影响就是当调用String. intern时性能会大幅下降。


使用 - XX:StringTableSize可设置StringTable的长度


在jdk6中StringTable是固定的,就是1009的长度,所以如果常量池中的字符串过多就会


导致效率下降很快。StringTableSize设 置没有要求


在jdk7中,StringTable的长度默认值是60013


jdk8开始,1009是StringTable长度可设置的最小值


②. String的内存分配


①. 常量池就类似一个Java系统级别提供的缓存。8种基本数据类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:


直接使用双引号声明出来的String对象会直接存储在常量池中(比如: String info = “abc” )


如果不是用双引号声明的String对象,可以使用String提供的intern()方法


②.String的基本操作


微信图片_20220106143934.png

  class Memory {
      public static void main(String[] args) {//line 1
          int i = 1;//line 2
          Object obj = new Object();//line 3
          Memory mem = new Memory();//line 4
          mem.foo(obj);//line 5
      }//line 9
      private void foo(Object param) {//line 6
          String str = param.toString();//line 7
          System.out.println(str);
      }//line 8
  }


微信图片_20220106143954.png




相关文章
|
6月前
|
Arthas 存储 算法
深入理解JVM,包含字节码文件,内存结构,垃圾回收,类的声明周期,类加载器
JVM全称是Java Virtual Machine-Java虚拟机JVM作用:本质上是一个运行在计算机上的程序,职责是运行Java字节码文件,编译为机器码交由计算机运行类的生命周期概述:类的生命周期描述了一个类加载,使用,卸载的整个过类的生命周期阶段:类的声明周期主要分为五个阶段:加载->连接->初始化->使用->卸载,其中连接中分为三个小阶段验证->准备->解析类加载器的定义:JVM提供类加载器给Java程序去获取类和接口字节码数据类加载器的作用:类加载器接受字节码文件。
615 55
|
4月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
307 15
|
11月前
|
缓存 监控 算法
Python内存管理:掌握对象的生命周期与垃圾回收机制####
本文深入探讨了Python中的内存管理机制,特别是对象的生命周期和垃圾回收过程。通过理解引用计数、标记-清除及分代收集等核心概念,帮助开发者优化程序性能,避免内存泄漏。 ####
270 3
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
698 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
209 6
|
存储 监控 算法
Java中的内存管理与垃圾回收机制解析
本文深入探讨了Java编程语言中的内存管理方式,特别是垃圾回收机制。我们将了解Java的自动内存管理是如何工作的,它如何帮助开发者避免常见的内存泄漏问题。通过分析不同垃圾回收算法(如标记-清除、复制和标记-整理)以及JVM如何选择合适的垃圾回收策略,本文旨在帮助Java开发者更好地理解和优化应用程序的性能。
|
11月前
|
存储 监控 算法
Java内存管理的艺术:深入理解垃圾回收机制####
本文将引领读者探索Java虚拟机(JVM)中垃圾回收的奥秘,解析其背后的算法原理,通过实例揭示调优策略,旨在提升Java开发者对内存管理能力的认知,优化应用程序性能。 ####
183 0
|
监控 算法 Java
Java中的内存管理:理解垃圾回收机制
【10月更文挑战第2天】 在本文中,我们将深入探讨Java编程语言中的内存管理机制,特别是垃圾回收机制。我们将从基本原理、垃圾回收算法到实际应用场景全面解析,帮助你更好地理解和优化Java应用的内存使用。无论你是初学者还是有经验的开发者,这篇文章都能带给你新的启发和思考。
122 2
|
监控 算法 Java
Java中的内存管理与垃圾回收机制
本文将深入探讨Java编程语言中的内存管理方式,特别是垃圾回收(Garbage Collection, GC)机制。我们将了解Java虚拟机(JVM)如何自动管理内存,包括对象创建、内存分配以及不使用对象的回收过程。同时,我们还将讨论不同的垃圾回收算法及其在不同场景下的应用。