论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Java面试题中高级进阶(JVM篇Java垃圾回收) ...
Java面试题中高级进阶(JVM篇Java垃圾回收)
涛声依旧在
金牌会员
|
2024-11-1 20:54:36
|
显示全部楼层
|
阅读模式
楼主
主题
835
|
帖子
835
|
积分
2505
前言
本来想着给本身放松一下,刷刷博客,突然被几道面试题难倒!说说Java对象创建过程?知道类的生命周期吗?简述Java的对象结构?如何判断对象可以被回收?JVM的永久代中会发生垃圾回收么?你知道哪些垃圾网络算法?似乎有点模糊了,那就大概看一下面试题吧。好记性不如烂键盘
*** 12万字的java面试题整理 ***
说说Java对象创建过程
JVM碰到一条新建对象的指令时首先去查抄这个指令的参数是否能在常量池中界说到一个类的符号引用。然后加载这个类
为对象分配内存。一种办法“指针碰撞”、一种办法“空闲列表”,终极常用的办法“本地线程缓冲分
配(TLAB)”
将除对象头外的对象内存空间初始化为0
对对象头举行必要设置
知道类的生命周期吗?
类的生命周期包括这几个部分,加载、连接、初始化、利用和卸载,其中前三部是类的加载的过程
加载,查找并加载类的二进制数据,在Java堆中也创建一个java.lang.Class类的对象
连接,连接又包含三块内容:验证、准备、初始化。 1)验证,文件格式、元数据、字节码、符号引用验证; 2)准备,为类的静态变量分配内存,并将其初始化为默认值; 3)解析,把类中的符号引用转换为直接引用
初始化,为类的静态变量赋予精确的初始值
利用,new出对象程序中利用
卸载,执行垃圾回收
简述Java的对象结构
Java对象由三个部分构成:对象头、实例数据、对齐添补。
对象头由两部分构成,第一部分存储对象自身的运行时数据:哈希码、GC分代年龄、锁标识状态、线程持有的锁、偏向线程ID(一样平常占32/64 bit)。第二部分是指针类型,指向对象的类元数据类型(即对象代表哪个类)。如果是数组对象,则对象头中另有一部分用来记录数组长度。
实例数据用来存储对象真正的有效信息(包括父类继承下来的和本身界说的)
对齐添补:JVM要求对象起始地点必须是8字节的整数倍(8字节对齐)
如何判断对象可以被回收?
判断对象是否存活一样平常有两种方式:
引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用开释时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。
可达性分析(Reachability Analysis):从GC Roots开始向下搜刮,搜刮所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,不可达对象
JVM的永久代中会发生垃圾回收么?
垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(FullGC)。如果你仔细查看垃圾网络器的输出信息,就会发现永久代也是被回收的。这就是为什么精确的永久代巨细对避免Full GC是非常重要的缘故原由。请参考下Java8:从永久代到元数据区 (注:Java8中已经移除了永久代,新加了一个叫做元数据区的native内存区)
你知道哪些垃圾网络算法
GC最底子的算法有三种: 标记 -打扫算法、复制算法、标记-压缩算法,我们常用的垃圾回收器一样平常都采用分代网络算法。
标记 -打扫算法,“标记-打扫”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“打扫”两个阶段:首先标记出全部需要回收的对象,在标记完成后统一回收掉全部被标记的对象。
复制算法,“复制”(Copying)的网络算法,它将可用内存按容量划分为巨细相称的两块,每次只利用其中的一块。当这一块的内存用完了,就将还存在世的对象复制到别的一块上面,然后再把已利用过的内存空间一次清理掉。
标记-压缩算法,标记过程仍然与“标记-打扫”算法一样,但后续步骤不是直接对可回收对象举行清理,而是让全部存活的对象都向一端移动,然后直接清理掉端边界以外的内存
分代网络算法,“分代网络”(Generational Collection)算法,把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的网络算法。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
涛声依旧在
金牌会员
这个人很懒什么都没写!
楼主热帖
MySQL基本SQL语句之高级操作
maven配置步骤及问题
史上最全MongoDB之部署篇
Juc并发编程12——2万字深入源码:线程 ...
IOS OpenGL ES GPUImage 图像黑白色调 ...
一文读懂K-Means原理与Python实现 ...
【云原生】裸金属架构之服务器安装VMWa ...
Flink-基于 DataStream API 实现欺诈检 ...
大数据ETL开发之图解Kettle工具(入门 ...
Java 2023年接地气的中高级面试题一( ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表