面经-Java创建对象的过程
2022/8/27 1:23:15
本文主要是介绍面经-Java创建对象的过程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
java创建对象的过程主要分为一下五个步骤:
(1)类加载检查
Java虚拟机(jvm)在读取一条new指令时候,首先检查能否在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否被加载、解析和初始化。如果没有,则会先执行相应的类加载过程。
(2)内存分配
在通过(1)后,则开始为新生的对象分配内存。该对象所需的内存大小在类加载完成后便可确定,因此为每个对象分配的内存大小是确定的。而分配方式主要有两种,分别为:
1.指针碰撞
应用场合:堆内存规整(通俗的说就是用过的内存被整齐充分的利用,用过的内存放在一边,没有用过的放在另外一边,而中间利用一个分界值指针对这两边的内存进行分界,从而掌握内存分配情况)。
即在开辟内存空间时候,将分界值指针往没用过的内存方向移动向应大小位置即可)。
将堆内存这样划分的代表的GC收集器算法有:Serial,ParNew
2.空闲列表
应用场合;堆内存不规整(虚拟机维护一个可以记录内存块是否可以用的列表来了解内存分配情况)
即在开辟内存空间时候,找到一块足够大的内存块分配给该对象即可,同时更新记录列表。
将堆内存这样划分的代表的GC收集器算法有:CMS
(3)初始化默认值
第(2)步完成后,紧接着,虚拟机需要将分配到的内存空间都进行初始化(即给一些默认值),这将做是为了保证对象实例的字段在Java代码中可以在不赋初值的情况下使用。程序可以访问到这些字段对用数据类型的默认值。
(4)设置对象头
初始化(3)完成后,虚拟机对对象进行一些简单设置,如标记该对象是哪个类的实例,这个对象的hash码,该对象所处的年龄段等等(这些可以理解为对象实例的基本信息)。这些信息被写在对象头中。jvm根据当前的运行状态,会给出不同的设置方式。
(5)执行初始化方法
在(4)完成后,最后执行由开发人员编写的对象的初始化方法,把对象按照开发人员的设计进行初始化,一个对象便创建出来了。
参考资料:https://blog.csdn.net/q160336802/article/details/123054729
这篇关于面经-Java创建对象的过程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行