Dog dog=new Dog()背后执行过程

这个涉及到字节码文件结构,类加载机制,堆,栈的认识等知识点。

在执行new的时候可以大致分为二个过程,初始化以及实例化,初始化就是类的加载过程,首先我们写的类的代码被jvm编译为字节码文件,然后这个字节码文件被加载到内存中,这个过程涉及到加载,验证,准备,解析,初始化等五个步骤,具体来讲,Dog类的字节码文件包含了魔数,jdk的版本以及类的元数据,如常量池,字段表,方法表,属性表等,加载过程就是将这个字节码文件转换为二进制流放入jvm内存中方法区区域,并在堆中生成这个类的java.lang.class对象,作为访问这个类各种数据的入口,这里还涉及验证这个类是否满足jvm的规范以及是否威胁jvm安全,之后就是准备阶段,就是为静态变量分配内存并初始成类型的默认值,紧接着就是解析阶段,将符号引用也就是字节码中那些类和接口的全限定名替换成直接引用,即内存中的真正地址,然后就是初始化,赋值静态变量为指定值并执行静态方法,之后就是根据类的信息创建对象,包括为对象分配内存,主要是给本类和父类的实例变量分配,然后初始默认值,紧接着执行结构化代码赋予变量指定值,这个过程先初始父类再初始子类,最后就是会在栈中申请一块空间指向堆内存中的实例对象。

总之就是两个过程,类加载过程以及实例化过程,代码层面涉及到代码的执行顺序(父静态子静态//父构造代码块构造方法普通方法//子构造代码块构造方法普通方法),以及堆栈存储什么等知识点

在java中new一个对象的流程是什么?的更多相关文章

  1. Java 中的运算符和流程控制

    Java 中的运算符和流程控制 + 面试题 算术运算符 Java 中的算术运算符,包括以下几种: **算术运算符** **名称** **举例** + 加法 1+2=3 - 减法 2-1=1 \* 乘法 ...

  2. jvm大局观之内存管理篇(二):当java中new一个对象,背后发生了什么

    https://zhuanlan.zhihu.com/p/257863129?utm_source=ZHShareTargetIDMore 番茄番茄我是西瓜 那是我日夜思念深深爱着的人啊~ 已关注   ...

  3. java中new一个对象放在循环体里面与外面的区别

    首先说下问题: 这次在做项目的是出现了一个new对象在循环里面与外面造成的不同影响. 大家可以看到这个new的对象放在不同的位置产生的效果是不一样的. 经过多方查询与验证可以得出结论: * EasyU ...

  4. 深入理解java中HelloWorld的执行流程

    HelloWorld.java是我们学习java的第一个程序,简单的再也不能简单了,可是里面的原理以及执行流程大家都知道吗?最近在复习java知识,特地钻研了一番分享给大家! 贴出HelloWorld ...

  5. java中new一个对象的执行过程及类的加载顺序

    1,new一个对象时代码的执行顺序 (1)加载父类(以下序号相同,表明初始化是按代码从上到下的顺序来的) 1.为父类的静态属性分配空间并赋于初值 1.执行父类静态初始化块; (2)加载子类 2.为子类 ...

  6. Java中把一个对象的值复制给另外一个对象引发的思考

    Spring生态在Java项目中被广泛应用,从架构到技术应用再到常用的基本功能,Spring给我们的开发带来了很大的便利.今天翻到项目中导出报表功能的时候,发现经常复制对象的方法: BeanUtils ...

  7. java中new一个对象和对象=null有什么区别

    原创:转载请注明出处 今天在写代码时,遇到一个问题,特此进行记录. for (ProfileDto profileDto : profile)            { // Profile resP ...

  8. Java中动态代理工作流程

    当谈到动态代理就会想到接口,因为接口是一种规范,动态代理对象通过接口便会很清楚地知道他的实现类(被代理对象)是何种类型的(即有哪些方法).Now,然我们来开始编写一个例子来了解动态代理的全过程: 第一 ...

  9. 当我们在Java中新建一个对象的时候发生了什么?

  10. 简单聊聊java中如何判定一个对象可回收

    背景 说到java的特性,其中一个最重要的特性便是java通过new在堆中分配给对象的内存,不需要程序员主动去释放,而是由java虚拟机自动的回收.这也是java和C++的主要区别之一:那么虚拟机是如 ...

随机推荐

  1. UNIT FIVE TO EIGHT

    内存单元间接表示 mov dl, [0] :直接寻址 mov bx, 0mov dl, [bx]:间接寻址 loop指令 1.语法 loop 标号 2.CPU执行指令过程 ① (cx) ← (cx) ...

  2. vue + antV G6 实现流程图完整代码 (antv G6 流程图)

    效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  3. varchar(100)和varchar(10)的区别

    mysql存储字段"abcdef",varchar(10)和varchar(100)都可以存储,且占用的磁盘存储空间是一样的,磁盘是按照实际长度存储.但,如果需要排序等内存操作,加 ...

  4. C#找出可用TCP端口,仅两行代码就搞定

    var start = 2222; var ps = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners().Select ...

  5. kubctl

    kubctl delete 命令:删除资源 根据yaml文件删除对应的资源,但是yaml文件并不会被删除,这样更加高效 delete 描述: 按文件名.stdin.资源和名称或按资源和标签选择器删除资 ...

  6. 尝试改善科研V2

    参考链接: https://fulequn.github.io/2022/09/26/Article202209261/ https://www.xljsci.com/ https://apps.an ...

  7. 图论之最小生成树问题(kruskal)

    最近有几位同学催我更新,于是来摸摸鱼,来讲一下最小生成树问题. 所谓最小生成树(MST),就是在一张无向带权图中的一棵经过所有节点,边权和最小的一棵树.在实际生活中,可以运用于城镇之间的修路上. 对于 ...

  8. LeetCode 之 111. 二叉树的最小深度

    原题链接 思路: 递归计算每个子树的深度,返回左右子树中深度小的值: 由于题目中要求的是到最近叶子节点的深度,所以需要判断 左右子树为空的情况: python/python3: class Solut ...

  9. mmdetection可视化工具-DetVisGUI

    保存数据 执行程序,需要保存输出结果的pkl文件或者json文件 下面以测试faster_rcnn示例: 在执行测试时可以使用下面这条命令,就会将结果保存到一个pkl文件中. python tools ...

  10. (十五).web字体

    WEB字体 1.1 web 字体基本语法 /* 引入Web字体 给web字体取名字*/ @font-face { font-family: "FZSJ-WSMQSJW"; src: ...