继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

一起写代码2公众号
关注TA
已关注
手记 34
粉丝 1
获赞 5

课程名称:笑傲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也可以。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP