当前位置: 首页 > 面试题库 >

Java堆术语:young, old and permanent generations?

洪飞驰
2023-03-14
问题内容

我试图了解Java堆术语中的年轻,老年和永久一代的概念,更具体地说是三代之间的交互。
我的问题是:

  • What is the young generation?
  • What is the old generation?
  • What is the permanent generation?
  • How does the three generations interact/relate to each other?

问题答案:

这似乎是一种常见的误解。在Oracle的JVM中,永久生成不是堆的一部分。它是用于类定义和相关数据的单独空间。在Java 6和更早版本中,实习生字符串也存储在永久代中。在Java 7中,插入的字符串存储在主对象堆中。

这是永久世代的好帖子。

我喜欢Oracle 关于JConsole的指南中对每个空间的描述:

对于HotSpot Java VM,用于串行垃圾回收的内存池如下。

  • Eden Space (heap):最初为大多数对象分配内存的池。
  • Survivor Space (heap):包含在Eden空间的垃圾回收中幸存的对象的池。
  • Tenured Generation (heap):包含幸存者空间中已有一段时间的对象的池。
  • Permanent Generation (non-heap):包含虚拟机本身所有反射数据的池,例如类和方法对象。对于使用类数据共享的Java VM,这一代被分为只读和读写区域。
  • Code Cache (non-heap):HotSpot Java VM还包括代码缓存,其中包含用于编译和存储本机代码的内存。

Java使用分代垃圾回收。这意味着,如果你有一个对象foo(它是某个类的实例),则该对象幸存的垃圾收集事件越多(如果仍然有对其的引用),则它得到的推广就越多。它始于年轻一代(本身被划分为多个空间-伊甸园和幸存者),如果生存了足够长的时间,最终将进入终身一代。



 类似资料:
  • 对于这个简单的问题,我需要找到stack1的值,如果有的话,按顺序。在堆栈中,原则是后进先出或FILO(先进先出)。使用堆栈的原因是反转数据,并以相反的顺序显示。 上面的问题让我想,如果我们使用这个原则,答案应该是:8,3,5,2。 8是从5和2开始的最后一个值,然后下一个值是3(“pop”是在“head”处删除)。接下来的两个值是5和2。这是正确的答案,还是我得到了错误的答案?

  • Young 是一个用 Python 写的功能丰富的、界面小清新的类似 NodeBB 的社区软件。 Features 话题按主题分类,你可以查看某一主题的话题 支持匿名发帖,匿名评论 社交功能(朋友圈,发状态) 像 QQ 一样即时聊天 实时提醒 资源分享

  • 1、拷打项目 2、线程池流程 3、死锁的必要条件,给了一个转账场景问会不会发生死锁 4、tcp的流量控制与拥塞避免 5、乐观锁悲观锁 6、AQS 7、springboot中不想加载一个bean如何做 8、spring AOP 1月份面的,当时在家摆烂,八股全部忘光光!不出意外g

  • 术语 通用术语 Blockchain:区块链,基于密码学的可实现信任化的信息存储和处理技术。 CA:Certificate Authority,负责证书的创建、颁发,在 PKI 体系中最为核心的角色。 Chaincode:链上代码,运行在区块链上提前约定的智能合约,支持多种语言实现。 Decentralization(去中心化):无需一个第三方的中心机构存在。 Distributed(分布式):非

  • 统一特殊词汇的翻译标准,请按字典序记录。 a 英文 中文 address space 地址空间 allocator 分配器 b 英文 中文 boot loader 引导加载器 buffer cache 缓冲器高速缓存,块缓冲 c 英文 中文 (sleep/wakeup) channel (睡眠/唤醒)队列 console 控制台 context 上下文 convoy 护航 coroutine 共行

  • 标签(label): 一个域名的独立组成部分,比如'alice.eth'中的'alice'。 标签散列(labelhash): 单个标签的keccak256散列。 域名(name): ENS标识符,如'alice.eth',一个ENS域名可能由多个独立部分(标签)组成,标签之间用点分隔。 Namehash: 用于处理ENS域名并返回唯一标识该域名的加密散列的算法。Namehash以域名作为输入,并