Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >字符串文字的垃圾收集

字符串文字的垃圾收集
EN

Stack Overflow用户
提问于 2013-03-10 07:50:27
回答 4查看 14.1K关注 0票数 21

我正在阅读有关垃圾收集的内容,当我搜索字符串文字垃圾收集时,我会得到令人困惑的搜索结果。

我需要澄清以下几点:

  1. 如果一个字符串在编译时(例如:String str = "java" )被定义为文字,那么它会被垃圾收集吗?
  2. 如果使用intern (例如:String str = new String("java").intern() ),那么它会被垃圾收集吗?此外,在第1点中,它是否与字符串文本有不同的处理方式。
  3. 有些地方提到,只有在卸载String类时才会垃圾收集文字?这是否有意义,因为我认为String类永远不会被卸载。
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-10 08:15:37

如果一个字符串在编译时(例如:String str = "java"; )被定义为文字,那么它会被垃圾收集吗?

可能不会。代码对象将包含对表示文本的String对象的一个或多个引用。因此,只要代码对象是可访问的,String对象就会到达。

代码对象可能变得不可访问,但前提是它们是动态加载的.他们的类装载机也被毁了。

如果我使用实习生方法,例如:String str = new String("java").intern(),那么它会被垃圾收集吗?

intern调用返回的对象将是表示"java"字符串文本的相同对象。( "java"文本在类加载时被嵌入。然后,当您在代码片段中实习生新构造的String对象时,它将查找并返回以前被嵌入的"java"字符串。)

但是,与字符串文本不相同的内部字符串一旦变得不可访问,就会被垃圾收集。PermGen空间是在所有最近的HotSpot JVM上收集的垃圾。(在Java 8之前.这完全降低了PermGen。)

此外,在第1点中,它是否与字符串文本有不同的处理方式。

不..。因为它是与字符串文本相同的对象。

事实上,一旦您了解了正在发生的事情,很明显,字符串文本也没有得到特别的处理。这只是“可达性”规则的一个应用.

有些地方提到,只有在卸载String类时才会垃圾收集文字?这是否有意义,因为我认为String类永远不会被卸载。

你是正确的。这没有意义。说这是不正确的消息来源。(如果你发布了一个URL,这样我们就能读到他们为自己说的话,这将是有帮助的。)

票数 19
EN

Stack Overflow用户

发布于 2013-03-10 07:57:57

在正常情况下,字符串文本和类都分配到JVM的永久生成("PermGen")中,并且通常不会被收集。内部的字符串(例如mystring.intern())存储在permgen中String类拥有的内存池中,而且曾经发生过这样的情况,即侵略性的实习生可能会导致空间泄漏,因为字符串池本身包含对每个字符串的引用,即使不存在其他引用。显然,这不再是正确的,至少在JDK1.6中是这样的(例如,请参见here)。

有关permgen的更多信息,this是该主题的一个不错的概述。(注意:该链接指向与产品相关的博客。我与博客、公司或产品没有任何关联,但博客条目很有用,与产品没有多大关系。)

票数 10
EN

Stack Overflow用户

发布于 2013-03-10 07:58:54

  1. 只要程序在内存中,文字字符串就会保留在内存中。
  2. str将被垃圾收集,但是它创建的文字不会。
  3. 这是完全合理的,因为当程序卸载时,字符串类将被卸载。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15324143

复制
相关文章
Java 垃圾收集器的垃圾收集算法
在 Java 中,垃圾回收是个基础而有趣的话题,本文主要讲解 Java 垃圾收集器的垃圾收集算法,首先,需要理解几个概念:
CS实验室
2021/03/22
4920
Java 垃圾收集器的垃圾收集算法
JVM垃圾收集之——垃圾收集算法
链接: JVM垃圾收集之——怎样判定一个对象是不是垃圾 接上篇,介绍完怎样判定一个对象是不是垃圾之后,就该瞅一瞅垃圾是怎样回收的了 首先我们要知晓,垃圾收集是建立在两个分代假说之上的:
向着百万年薪努力的小赵
2022/12/02
4480
JVM垃圾收集之——垃圾收集算法
垃圾收集算法
在前面的引用计数法和可达性算法一文中,我们讲了一个引用要被回收需要达到的条件以及怎么判断一个引用是否要被回收。了解了这些知识,就到了今天要讲的垃圾收集算法。
飞翔的竹蜻蜓
2020/07/08
7000
垃圾收集算法
JVM垃圾收集
目录 内存区域回顾 机制介绍 收集器介绍 调优 内存区域回顾 垃圾回收机制 Java 对象生命周期 根搜索算法 从GC Roots对象为起点,开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC
囚兔
2018/02/08
7980
JVM垃圾收集
JavaScript垃圾收集
JavaScript具有自动收集垃圾的机制,也就是说执行环境会负责管理代码执行过程中的内存。JavaScript的内存分配以及内存的回收都是自动。垃圾回收机制:找到不再使用的变量,然后释放其占用的内存。 垃圾回收器会按照固定的时间间隔执行这一操作。 局部变量的生命周期,局部变量只在函数执行过程中存在,会为局部变量在栈(堆)内存上分配相应的空间,以便存储值。在函数中使用这些变量,直至函数执行结束。此时,局部变量就没有存在的必要了,可以释放他们的内存。在这种情况下,很容易判断变量是否还有存在的必要;但不是所有情
水击三千
2018/02/27
6320
垃圾收集算法
垃圾收集算法 引用计数法 优点 不用等待内存不够用的时候才进行垃圾的回收。可以边赋值边检查计数器的值是否为0:没有延时性 缺点 循环依赖,可能引起内存泄漏。 需要单独的字段存储计数器,增加了存储的开销。 每次赋值时,都需要时间上的开销。 根搜索算法 使用根搜索算法后,内存中的存活对象都会被根对象集合直接或间接连接着。 可能的根对象 Java栈内对象引用 本地方法栈内对象引用 运行时常量池对象引用 方法区类静态属性的对象引用 一个类队形的唯一数据类型的Class对象 死缓阶段 真正被回收,需要经历
晓果冻
2022/06/17
2250
垃圾收集算法
JavaScript垃圾收集
在很多语言中,开发人员的一项基本任务就是手动跟踪内存的使用情况,这是造成许多问题的根源。而 JavaScript具有垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存。因此在编写 JavaScript 程序时,开发人员不用在关心内存使用问题。
流眸
2021/04/08
5270
垃圾收集算法
垃圾收集器是Java虚拟机中自带的功能,它的目的是帮助我们管理内存,正是因为有它的存在所以,我们在开发时,基本不用考虑内存溢出等问题。基本不用考虑不代表,一定不会遇到内存溢出等问题,在上一篇中我们用简单的方法模拟了一些内存溢出的问题,在这一篇我们将重点分享一下,Java中垃圾收集器的一些实现算法知识,了解这方面的知识有助于,在内存溢出时,快速的解决问题。垃圾收集器的主要功能有3个。
吉林乌拉
2019/08/14
4260
JVM的垃圾收集算法
当前商业虚拟机的垃圾收集器,大多数都遵循了 “分代收集”(Generational Collection)的理论进行设计,分代收集名为理论,实质是一套符合大多数程序运行实际情况的经验法则,分代收集理论它建立在两个分代假说之上:
真正的飞鱼
2023/04/05
3480
jvm -垃圾收集算法与经典垃圾收集器
标记清除算法,首先对需要收集的对进行标记,或者对不需要回收的对象进行标记,然后统一回收掉被标记的对象。
猎户星座1
2020/06/12
2780
JVM笔记-垃圾收集算法与垃圾收集器
引用计数法(Reference Counting):为每个对象添加一个引用计数器,用来统计指向该对象的引用个数。当有地方引用它时,计数器加一;引用失效时减一。当某个对象的引用计数为零时,说明该对象已死亡,便可以被回收了。
WriteOnRead
2020/02/24
5250
Java的垃圾收集机制和作用,以及HotSpot JVM的垃圾收集算法
在Java中,垃圾收集机制(Garbage Collection)是一种自动的管理内存的机制,用于回收不再使用的对象所占的内存空间。
一凡sir
2023/08/13
2670
Java的垃圾收集机制和作用,以及HotSpot JVM的垃圾收集算法
JVM垃圾收集—垃圾收集器及常见组合参数
串行收集器 Serial 和 Serial Old 只能有一个垃圾回收线程执行,用户线程暂停。(适用于内存较小的嵌入式设备)
向着百万年薪努力的小赵
2022/12/02
6330
JVM垃圾收集—垃圾收集器及常见组合参数
JVM-05垃圾收集Garbage Collection(中)【垃圾收集算法】
JVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】探讨了如何判定堆内存中的对象是否已经死亡,这里我们来继续讨论下JVM中常用的垃圾收集算法
小小工匠
2021/08/17
2450
HotSpot垃圾收集器1 Serial垃圾收集器2 ParNew垃圾收集器3 Parallel Scavenge垃圾收集器老年代垃圾收集器1 Serial Old垃圾收集器2 Parallel Ol
HotSpot虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,没有最好的垃圾收集器,只有最适合的垃圾收集器 根据新生代和老年代各自的特点,我们应该分别为它们选择不同的收集器,以提升垃圾回收效率.
JavaEdge
2018/05/16
9770
五、垃圾收集算法
算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。之所以说它是最基础的收集算法,是因为后续的收集算法大多都是以标记-清除算法为基础,对其缺点进行改进而得到的。
大数据程序猿
2020/09/10
4440
五、垃圾收集算法
深挖Jvm垃圾收集
垃圾收集(Garbage Collection,GC),它的任务是解决以下 3 件问题:
李红
2019/07/06
3160
JVM - 再聊GC垃圾收集算法及垃圾收集器
当前虚拟机的垃圾收集都采用分代收集算法 , 意思就是根据对象存活周期的不同将 java堆分为新生代和老年代,这样就可以根据各个年代的特点选择合适的垃圾收集算法。
小小工匠
2021/08/17
3420
垃圾收集器
HotSpot按照分代收集,所以在不同代上产生了多种不同的收集器,随着时间的推移,有些已经弃用,有些已经成为经典,还有目前广泛使用的,如图1-19所示就是7个经典的垃圾收集器,其中G1是目前应用最为广泛的,还有一些是JDK8以上支持的垃圾收集器,图中并未展示,后面小结中会提到。
胖虎
2020/11/24
4070
垃圾收集器
JVM垃圾收集详解
为每个对象标记一个引用数量,当这个对象被另外一个对象引用时它的引用数据就加一,当另外一个对象释放了对它的引用它的引用数量就减一。当它的引用变为0时意味着没有对象引用,就可以回收了
Java学习录
2019/05/15
4190

相似问题

字符串对象及其文字是否被垃圾收集?

23

java中的字符串文字和垃圾收集器

21

字符串文字可以成为垃圾收集的条件吗?以这种方式?

11

Java 6和Java 7中字符串文字的垃圾收集(Oracle Jdk)

11

垃圾收集和字符串

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文