首页 > 编程语言 >面经-Java创建对象的过程

面经-Java创建对象的过程

时间:2022-08-26 17:00:45浏览次数:91  
标签:初始化 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,对象,虚拟机,面经,创建对象,内存,加载
From: https://www.cnblogs.com/lysboke/p/16628144.html

相关文章

  • java质数算法
    importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importjava.stream.Collectors;importjava.stream.Stream;publicclassMain{publ......
  • 【Java】使用Druid连接池的监控面板排查慢SQL
     默认在后台服务的地址:http://localhost:8078/druid/login.html账号信息放在配置文件中获取:server:port:8078spring:datasource:druid:......
  • 代码审计(Java)——WebGoat_RequestForgeries
    一、Cross-siteRequestForgeries1.level3 这里的level3,就是限制了Referer的参数值为空或者是不等于host即可,单纯为了教学而设计的题目,没啥可说的~因......
  • JavaScript变量及声明
    本文介绍了如何使用语法和示例声明和使用变量。变量用于将数据存储在JavaScript代码中。在JavaScript中使用变量之前,必须先对其进行声明。让我们看一下如何声明一个变量。......
  • JavaScript if else语句
    在编写程序时,可能需要从一组给定的路径中采用一个。在这种情况下,您需要使用条件语句,以使程序可以做出正确的决定并执行正确的操作。在JavaScript中,if-else语句用于在条件......
  • JavaScript switch语句
    除了if...else之外,JavaScript还有一个称为switch语句的功能。switch是一种条件语句,它将针对多种可能的情况评估表达式,并根据匹配的情况执行一个或多个代码块。switch语......
  • Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.pr
    springboot的版本和springcloud的版本不一致导致Causedby:java.lang.ClassNotFoundException:org.springframework.boot.context.properties.Configurati错误截图......
  • 【Java面试】准备跳槽!那这期面试题必须要会,请描述一下Redis的缓存淘汰策略
    “请你描述一下Redis的缓存淘汰策略”你如果你正好遇到这个问题,想好怎么回答了吗?关于这个问题,我把高手的回答整理到了15W字的面试文档里面大家可以私信留言领取。下面......
  • 在python程序中调用java代码
     Python是一门“胶水”语言,非常灵活多变,但是在一些特殊的时候,也需要调用其它语言来协助实现更多的功能;在公司使用python进行接口测试的时候,会遇到有些接口数据是由公司的......
  • Java Bean 转换(copy)
    废话不多说上代码importorg.springframework.beans.BeanUtils;importorg.springframework.beans.BeanWrapper;importorg.springframework.beans.BeanWrapperImpl;im......