为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第12天+Java对象在内存中的结构

标签:
Java

课程名称:笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机

课程章节:第6章 JVM原理篇

主讲老师:求老仙

课程内容:

第6章 JVM原理篇

课程收获:

问题1)Java的对象在内存中的结构?

问这个问题其实,就是在问,对象的声明周期和Object在内存中的格式

问题2)对象的生命周期?

Object首先被加载到内存中,将class文件,通过ClassLoader加载到方法区,生成类型对象。

同时初始化静态成员变量和静态代码块,这是Load要做的事情。

第二步走到创建对象,创建对象,首先分配内存,调用构造函数等操作,创建完毕

第三步就是使用对象,如果gc从根节点root set可以找到该对象,说明可以继续存活,但有一种情况,会出现泄漏的情况,就是:创建了之后,一直没有被使用,同时也无法被回收,

例如:对象X是创建了,但是下面的while循环是死循环,所以x对象一直被当前对象引用,就会产生内存泄漏

问题3)classLoader如何打破双薪委派模型?

双亲委派模型:自低向上的检查,类是否被加载。如果没有被加载,就自顶向下进行加载。

ClassLoader的作用,是将.class文件,加载到方法区,生成类类型对象

问题4)不同的代码版本,使用不同的classLoader?以及好处?

通过前端,传递过来不同的参数,调用不同的api(重载),api走的是不同的业务逻辑。(对应的版本1中所有的类都需要用对应的自定义类去加载,版本2的代码用自定义类加载器去加载。)

好处:使用类加载器加载的类相互隔离的原来,来完成代码的区分

上面能看到下面,下面能看到上面,同级看不到。

使用classLoader加载不同版本的代码的好处,例如:这样foo和Bar类是不同的类加载器加载,是不可见的,但是他们的父加载器是可以看到他们两个类,所以可以将共用的代码逻辑,用父类加载器加载,这样foo也可以看到父类加载的内容,Bar也可以。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消