当前位置: 首页 > news >正文

墨刀做网站上下滑动的交互百度爱采购优化排名软件

墨刀做网站上下滑动的交互,百度爱采购优化排名软件,淘宝客网站建设公司,房地产公司网站建设方案文章目录 一、创建对象的步骤二、类加载机制三、内存分配指针碰撞 (内存连续)空闲列表 (内存不连续) 四、创建对象的5种方法五、浅拷贝与深拷贝 以下一行代码内部发生了什么? Person person new Person();一、创建对象的步骤 根据JLS中的规定,Java对象…

文章目录

    • 一、创建对象的步骤
    • 二、类加载机制
    • 三、内存分配
      • 指针碰撞 (内存连续)
      • 空闲列表 (内存不连续)
    • 四、创建对象的5种方法
    • 五、浅拷贝与深拷贝

以下一行代码内部发生了什么?

Person person = new Person();

一、创建对象的步骤

  根据JLS中的规定,Java对象的创建过程可以简要地描述为以下几个步骤:类加载、分配内存、初始化、调用构造方法、返回对象应用
在这里插入图片描述

  1. 类加载:包括查找并加载类的字节码.class文件,并将其转换成可执行代码,使得JVM可以执行这些类。
  2. 分配内存:当使用new关键字创建一个对象时,Java虚拟机会在堆内存中分配一块连续的内存空间来存储对象的实例变量和引用类型。
  3. 初始化:分配内存后,Java虚拟机对新创建的对象进行初始化。这包括对对象的实例变量进行默认初始化(数值类型为0,引用类型为null),并调用相应的构造方法来完成对象的初始化过程。如果对象存在继承关系,会从父类到子类依次调用构造方法,确保所有父类的构造方法都得到执行。
  4. 调用构造方法:构造方法是特殊的方法,用于初始化对象的状态。在对象初始化的过程中JVM会调用与类对应的构造方法来完成实例变量的初始化以及其他必要的初始化操作。
  5. 返回对象引用:对象初始化完成后new表达式会返回对新创建对象的引用,使得程序可以通过该引用访问和操作对象。

二、类加载机制

  JVM提供了三个类加载器,分别是BootStrap > Extension > Application,也可以自定义。
为了保证安全性和避免重复加载,设计了双亲委派机制
  即按照类加载器的层级关系逐层进行委派。如果父加载器无法加载,自己再尝试加载。如果已经加载过,自己就不用再重复加载。
  只要是符合 JVM 规范的字节码,不管通过 Java 源码编译生成的还是使用Java 字节码操纵工具类库(ASM、Javassist、cglib)生成的,都可以交给类加载器去加载。

三、内存分配

  JVM在运行Java程序时,需要管理内存的分配和回收。在内存管理的过程中,有两种常见的方式:指针碰撞(Bump the Pointer)和空闲列表(Free List)。JVM根据堆的不同区域和不同用途,选择不同的分配方式,具体的实现取决于不同的JVM实现和垃圾收集器策略。

指针碰撞 (内存连续)

  常用于实现固定大小的内存分配。JVM维护一个指向空闲内存区域的指针(称为"指针碰撞指针"),并且假定堆中的内存是连续的,分配内存就是将指针往前移动一定的字节数,然后将移动后的位置返回给请求分配内存的程序。

  该方式是以堆的内存是连续(内存规整)的作为前提条件的,这就要求Java虚拟机在启动时就要知道堆的大小,这样才能在堆的起始地址设置指针碰撞指针。因此,该方式不适用于动态扩展堆内存的情况。

空闲列表 (内存不连续)

  适用于动态扩展堆内存的情况。JVM维护一个空闲内存块列表,记录哪些内存块是可用的,而分配内存时,会遍历空闲列表,找到合适大小的内存块,并将其标记为已分配。这样,内存的分配可以更加灵活,不需要连续的内存空间。

  缺点是会产生一定的内存碎片。该问题JVM采用了内存整理算法来解决,如压缩、分代回收等。

四、创建对象的5种方法

  1. 使用new关键字:可以调用类的构造方法来创建对象,并在堆内存中为对象分配空间。
Person person = new Person();
  1. 使用反射:通过Class类的newInstance()方法或者Constructor类的newInstance()方法可以创建对象。
Class<?> personClass = Class.forName("com.example.Person");
Person person= (Person) personClass.newInstance();
  1. 使用clone()方法:可以实现对象的浅拷贝或者深拷贝。
Person person = new Person();
Person clonedPerson= (Person) person.clone();
  1. 使用对象工厂:对象工厂用于封装对象的创建过程,可以根据需要返回不同类型的对象实例。
public class PersonFactory {public static Person createPerson() {return new Person();}
}Person person = PersonFactory.createPerson();
  1. 使用静态工厂方法:类中的静态方法可以作为工厂方法,用于创建对象实例。静态工厂方法通常有自定义的名称,便于描述对象的创建方式。
public class Person{private Person() { }public static Person createPerson() {return new Person();}
}
Person person = Person.createPerson();

五、浅拷贝与深拷贝

浅拷贝(Shallow Copy)
  浅拷贝是复制对象本身和对象中的基本数据类型的字段,但不会复制对象中的引用类型字段。
  在浅拷贝中,被复制对象和新创建的对象会共享引用类型字段,这意味着如果改变了一个对象中的引用类型字段,那么另一个对象中的对应字段也会受到影响。

class Person {private String name;private Address address;
}Person originalPerson = new Person("Patrick", new Address("BJ"));
Person copiedPerson = (Person) originalPerson.clone();

  originalPerson对象和copiedPerson对象是两个独立的对象,但是它们共享同一个Address对象,如果修改了copiedPerson对象的Address对象,那么originalPerson对象的Address对象也会随之改变。
  浅拷贝常用的API有Spring的BeanUtils、Apache commons包中的PropertyUtils、实现Cloneable接口、Arrays的copyOf()方法

深拷贝(Deep Copy)
  深拷贝是复制对象本身和对象中的所有字段,包括引用类型字段。不是复制该对象的地址,而是递归复制该对象所有引用类型成员的副本。即被复制对象和新创建的对象完全独立,它们拥有各自的引用类型字段的副本,因此修改一个对象的引用类型字段不会影响另一个对象。

class Person {private String name;private Address address;public Person deepCopy() {Person newPerson = new Person(this.name, this.address.deepCopy());return newPerson;}
}class Address {private String city;public Address deepCopy() {return new Address(this.city);}
}Person originalPerson = new Person("Patrick", new Address("BJ"));
Person copiedPerson = originalPerson.deepCopy();

deepCopy()方法分别在PersonAddress类中实现了深拷贝。

深拷贝常用的5个API

  1. 重写clone方法,每个对象都要实现Cloneable接口并重写Object类中的clone方法
  2. 序列化时必须实现Serializable接口
  3. Apache commons工具包SerializationUtils.clone(T object)
  4. 通过JSON工具类实现深拷贝
  5. 通过手动new对象实现构造器方法的深拷贝

动态代理,本质上就是在特定的时机,去修改已有类型实现,或者创建新的类型。

http://www.ds6.com.cn/news/28594.html

相关文章:

  • 永川网站制作小网站
  • 优秀网站建设空间seo信息网
  • 一个公司设计网站怎么做的百度收录在线提交
  • 做网站平台百度推广怎么登录
  • wordpress删除小工具seo如何优化网站步骤
  • 泰安如何选择网站建设网站seo排名免费咨询
  • 网站模板 带后台直通车关键词怎么选 选几个
  • 百度做鸡网站电脑培训网上课程
  • 淄博做网站建设公司seo需要付费吗
  • 手机网站微信网站开发百度移动点击排名软件
  • 阳江网站推广哪些app最挣钱
  • 更改网站名称廊坊百度seo公司
  • 网站流量变现关键字有哪些
  • 企业注册邮箱的步骤手把手教你优化网站
  • 网站如何做聚合页面附近的教育培训机构有哪些
  • 没有备案的网站可以用ip访问吗seo是什么单位
  • 措勤网站建设黄页88网推广服务
  • 用dedecms做两个一样的网站汕头网站推广
  • 无锡网站建设书生商友2019年度最火关键词
  • 企业网页设计模板图片石家庄网站优化
  • 如何做一张图片的网站长春网站推广公司
  • 长春长春网站建设最近三天发生的重要新闻
  • 网站建设 好牛dw网页制作教程
  • 网站建设 业务网络营销推广专家
  • 花都营销网站建设网站优化排名推荐
  • 多配色创意metro风格企业网站织梦模板seo工资
  • 专做茶叶的网站厦门人才网唯一官方网站登录入口
  • 在天津做网站的公司谷歌商店官网
  • 做网站没有签合同可以退款吗成都seo培训
  • html网站欣赏网站seo主要是做什么的