感觉要妥妥分享一波干货知识

new一个对象过程中发生了什么???

Java在new一个对象,会先查看对象所属的类是否被加载到内存,如果没有的话,先通过类的全限定名来进行加载。加载并初始化类完成后,在进行对象的创建工作。

总而言之就是俩个过程:加载初始化类和创建对象。

双亲委派模型

类加载器收到加载请求,自己不会进行加载,把这个请求委托给父类,以此类推。只有当父类反馈自己无法加载,子加载器才会尝试加载。

好处:可以有效确保一个类的全局唯一性,当程序出现多个限定名相同的类时,类加载器在执行加载时,始终只会加载其中的一类。

1.加载

2.验证(语义验证、操作验证)

3.准备(为类中所有静态变量分配空间)

4.解析

5.初始化(先父后子)(静态变量赋值,执行static代码块)

创建对象

1.在堆区分配对象需要的内存

分配内存包括子类和父类的实例变量

2.对所有实例变量赋默认值

方法区内对实例变量定义拷贝一份到堆区,赋默认值

3.执行实例初始化代码

执行顺序:先初始化父类再初始化子类

先执行代码在执行构造方法

4.如果有类似与

child c=new child()

形式的c引用的话,在栈区定义child 类型引用变量c,然后将堆区对象的地址赋值给它。

堆和栈

栈:

管程序如何运行;程序如何执行;如何处理数据

主管Java程序的运行,它保存方法的局部变量,部分中间的结果,并参与方法的调用和返回值,以栈帧的格式为基本单位进行存储

堆:

管理数据的存储

虚拟机内存与本地内存的区别

Java虚拟机在执行时会把管理的内存分配成不同的区域,这些区域被称为虚拟机内存,同时对于虚拟机没有直接管理的物理内存,也有一定利用,这些被利用却不再虚拟机内存数据区的内存,称为本地内存

JVM内存

受虚拟机内存大小的参数控制,当大小超过参数设置的大小时,就会报OOM

本地内存不受虚拟机内存参数的限制,只受物理内存容量的限制

虽然不受参数的限制,但是如果内存的占用超出物理内存的大小,同样也会报OOM

虚拟机栈JVM stacks

每个栈帧包含如下内容:

局部变量表

局部变量表中存储着方法里的java基本数据类型(byte,short,int,long,float,double,char,boolean)以及对象的引用

操作数栈

动态连接

方法返回地址

虚拟机异常

Stack OverFlowError:线程请求的栈深度大于虚拟机所规定的栈深度。栈溢出

Out OfMemoryError:虚拟机的栈容量可以动态扩展,那么当虚拟机栈申请不到内存时会抛出。OOM内存溢出

Java堆

java堆是JVM内存中最大一块。由于所有线程共享,是由来及收集器管理的内存区域,主要存放对象实例。由于java虚拟机的发展,堆中也多了许多东西,现主要有:

对象实例

类初始化生成的对象

基本数据类型的数组也是对象实例

字符串常量

字符串常量池原本存放与方法区,jdk 7开始放置于堆中

字符串常量池存储着的是String对象的直接引用,而不是直接存放对象,是一张String table

静态变量

静态变量有static修饰的变量,jdk 7时以方法区迁移至堆中

线程分配缓冲区

线程私有,但是不影响java堆的共性

增加线程分配缓冲区是为了提升对象分配时的效率

成员变量、局部变量、类变量分别存储在内存什么地方?

类变量

是用static修饰符修饰,定义在方法外的变量。随着java进程产生和销毁

在java 8之前把静态变量存放于方法区,在java 8时存放在堆区

成员变量

是定义在类中,但是,没有static修饰符修饰的变量随着类的实例产生和销毁,是类实例的一部分

由于实例的一部分,在类初始化时候,从运行时常量池取出直接引用或者值,与初始化的对象一起放入堆中

局部变量

局部变量时定义在类中方法中的变量

在所有方法被调用时放入虚拟机栈的栈帧中,方法执行结束后从虚拟机找出弹出。所以存放在虚拟机栈中。

分享(Java中new一个对象的过程)相关推荐

  1. java socket分包粘包 代码_分享java中处理socket通信过程中粘包情况的实例代码

    本篇文章主要介绍了java中处理socket通信过程中粘包的情况,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 这两天学习了java中处理socket通信过程中粘包的情况,而且很重要,所以,今天添 ...

  2. java类怎么删除对象_在java中删除一个对象?

    在java中删除一个对象? 我想删除一个我创build的对象(跟随着你的一个椭圆),但是我怎么做呢? delete follower1; 没有工作. 编辑: 好吧,我会给更多的上下文. 我正在制作一个 ...

  3. 请说明一下JAVA中反射的实现过程和作用分别是什么?

    请说明一下JAVA中反射的实现过程和作用分别是什么? Java语言编译后形成.class文件,反射就是通过字节码文件找到一个类,类中的方法及属性等.反射的实现主要通过四个类 Class 类的对象 Co ...

  4. Java:new一个对象的过程中发生了什么?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:沉默哥 cnblogs.com/JackPn/p/93861 ...

  5. java中new一个对象要经历哪些过程

    我们要了解new一个对象经历哪些过程,就要知道new对象之前会做什么事情. 首先Java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名将对象所属的 ...

  6. Java之new一个对象简单过程

    1 问题 new一个对象简单过程 2 过程 1)类加载过程(第一次使用该类) 先看这个类有没有加载到内存,没有的话下面操作 (1).加载:类加载器(双亲委派模式)通过全限名读取类的二进制流到jvm内部 ...

  7. 分享Java 中如何运行字符串表达式?

    2019独角兽企业重金招聘Python工程师标准>>> 在日常的开发中,偶尔会遇到运行字符串表达式的情况,通常这样的需求会对需求进行进一步分析,然后进行进一步 "特殊化&q ...

  8. java中new一个对象时具体都发生了什么?

    java是一门面向对象的程序设计语言,在java中一切皆为对象.在java中创建一个新对象的方式有很多种如new+构造方法,克隆,反射,反序列化等.那么当我们new一个对象时,java底层都经过了怎样 ...

  9. 动图 + 源码,演示 Java 中常用数据结构执行过程及原理

    最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...

  10. 数据结构中缀表达式转后缀表达式与后缀表达式的求值实训报告_动图+源码,演示 Java 中常用数据结构执行过程及原理...

    程序员的成长之路互联网/程序员/成长/职场 关注 阅读本文大概需要 3.7 分钟. 作者:大道方圆cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, ...

最新文章

  1. Cookie简单使用方法
  2. mapreduce任务出错最大尝试次数
  3. 2.7 RMSprop-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  4. Linux下挂载ISO文件
  5. PHP中||与or的区别
  6. java取得当前日期增加一天或多天
  7. Semaphore(多资源多线程)
  8. 利用Python获取数组或列表中最大的N个数及其索引
  9. [BZOJ2286] [Sdoi2011]消耗战
  10. linux用ping命令测试网速,Linux通过终端测试网速
  11. linux 搜狗输入法 不能使用方法,在Linux系统中Sublime Text无法使用搜狗输入法的解决方法...
  12. 离线数仓DIM层和DWD层,联表后表和字段命名规则
  13. deprecate(反对) 关于依赖版本低的问题
  14. php记录访问者ip和次数,一个能对访问者进行编号、记录访问次数、IP、时间的统计制作实例...
  15. 内存重叠的拷贝--memmove
  16. Linux文件系统与持久性内存介绍:块设备、闪存(NAND/NOR)、NVDIMM(非易失性内存)、PMEM(PMDK)- ndctl
  17. Thingsboard 时序数据和属性数据
  18. 70个数据分析常用网址,我先收藏了!
  19. 人力资源管理计算机基础,人力资源管理-专-李佑强-计算机应用基础实践报告.doc...
  20. CSS3的景深和transform 属性

热门文章

  1. MATLAB里根号打印,里根号
  2. 大批驱动管理软件(免安装版)
  3. java运维工程师简历模板_系统运维工程师个人个人简历模板.doc
  4. ERP原理学习3-5
  5. 亿图脑图-MindMaster-思维导图及亿图图示会员-史上超值活动
  6. 如何做好手机APP测试?APP测试流程及解决方案
  7. 关于ADS注册表删除和重新安装
  8. 《Unity shader入门精要》阅读笔记
  9. 视频上传接口测试实践
  10. 马上2023年了,终于发现一款颜值爆表的记账软件