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

网站建设维护学习网站多久才能做起来

网站建设维护学习,网站多久才能做起来,电信 网站备案,外籍人士在中国注册公司目录 一、java创建对象的几种方式 1.1、使用new关键字 1.2、反射创建对象 1.2.1、Class.newInstance创建对象 1.2.2、调用构造器再去创建对象Constructor.newInstance 1.3、clone实现 1.4、反序列化 二、创建对象的过程 2.1、分配空间的方式 1、指针碰撞 2、空闲列表 …目录 一、java创建对象的几种方式 1.1、使用new关键字 1.2、反射创建对象 1.2.1、Class.newInstance创建对象 1.2.2、调用构造器再去创建对象Constructor.newInstance 1.3、clone实现 1.4、反序列化 二、创建对象的过程 2.1、分配空间的方式 1、指针碰撞 2、空闲列表 3、怎么选择分配方式 三、注意事项 一、java创建对象的几种方式 1.1、使用new关键字 调用类的构造方法创建对象 1.2、反射创建对象 1.2.1、Class.newInstance创建对象 1.2.2、调用构造器再去创建对象Constructor.newInstance 先通过反射获取类中无参构造器然后通过newInstance()获取对象 1.3、clone实现 通过Clone创建对象首先实体类中必须先实现Cloneable接口并复写Object的clone方法因为Object的这个方法是protected的 1.4、反序列化 序列化指把 Java 对象转换为字节序列的过程 反序列化指把字节序列恢复为 Java 对象的过程 此方式需要类先实现Serializable接口 public class TestStack {public static void main(String[] args) throws Exception {File file new File(M:/Serializable.txt);FileOutputStream fileOutputStream new FileOutputStream(file);ObjectOutputStream outputStream new ObjectOutputStream(fileOutputStream);UserParam userParam new UserParam(hello);outputStream.writeObject(userParam);FileInputStream fileInputStream new FileInputStream(file);ObjectInputStream objectInputStream new ObjectInputStream(fileInputStream);UserParam userParam1 (UserParam)objectInputStream.readObject();userParam1.setNickName(world);System.out.println(userParam1);} } 二、创建对象的过程 当Java虚拟机遇到一条字节码new指令时 1、检查类是否已经被加载 去常量池中查找该引用所指向的类有没有被虚拟机加载如果没有被加载那么会进行类的加载过程。类的加载过程需要经历加载、链接、初始化三个阶段。对象的大小在类加载完成时确定。jdk1.8中运行时常量池、类常量池存在于方法区中。 2、 为对象分配内存空间 JVM为对象分配空间即把一块确定大小的内存块从Java堆中划分出来。 2.1、分配空间的方式 1、指针碰撞 假设Java堆中内存是绝对规整的所有被使用过的内存都被放在一边空闲的内存被放在另一边中间放着一个指针作为分界点的指示器那所分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离。 ①正常情况 ②给对象分配内存后 这种方式的优点是工作简单效率高只需要移动指针就可以分配内存空间。 缺点也很明显由于用指针碰撞分配内存空间分为两步 1、读取指针当前的位置。 2、根据自身大小移动指针不是原子操作对象创建在虚拟机中是非常频繁的操作在并发情况下会导致执行读操作或执行写操作的结果与预设的结果不一致指针划分不一致。 例如线程A要给对象分配8kb读取到指针当前的位置时间片用完切换到线程B线程B要给它的对象分配16kb也读取到指针当前的位置和线程A读取到的一样将指针向空闲内存方向移动16kb大小,线程B时间片用完切换到线程A继续执行由于线程A使用的指针位置还是之前读到的。线程不安全问题 ③针对指针碰撞线程不安全有两种方案 1、同步处理加锁分配内存空间行为 采用 CAS 分配重试的方式来保证更新操作的原子性 2、把内存分配行为按照线程划分在不同的内存空间进行 1、即每个线程在Java堆中预先分配一小块内存称为本地线程分配缓冲Thread Local Allocation BufferTLAB哪个线程要分配内存就在哪个线程的本地缓冲区中分配只有本地缓冲区用完了分配新的缓存区时才需要同步锁定 2、虚拟机是否使用TLAB可以通过-XX/-UseTLAB参数来设定。 2、空闲列表 如果Java堆中的内存并不是规整的 已被使用的内存和空闲的内存相互交错在一起那就没有办法简单地进行指针碰撞了虚拟机就必须维护一个列表记录上哪些内存块是可用的在分配的时候从列表中找到一块足够大的空间划分给对象实例并更新列表上的记录。 3、怎么选择分配方式 两种方式的选择由 Java 堆是否规整决定Java 堆是否规整是由选择的垃圾收集器是否具有压缩整理能力决定的。 ①将内存空间初始化为零值         内存分配完成之后虚拟机必须将分配到的内存空间但不包括对象头都初始化为零值。零值初始化意思就是对对象的字段赋0值或者null值这也就解释了为什么这些字段在不需要进程初始化时候就能直接使用。         如果使用了TLAB的话这一项工作也可以提前至TLAB分配时顺便进行。 ②对对象进行必要的设置         例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息。这些信息存放在对象的对象头中。 从虚拟机的视角来看一个新的对象已经产生了。但是从Java程序的视角看来对象创建才刚刚开始——构造函数即Class文件中的()方法还没有执行所有的字段都为默认的零值对象需要的其他资源和状态信息也还没有按照预定的意图构造好。 ③执行实例的初始化方法init init方法包含成员变量、构造代码块的初始化按照声明的顺序执行执行对象的构造 方法并把堆内对象的首地址赋值给引用变量。至此对象创建成功。 三、注意事项 并发情况下需要考虑操作的步骤是不是原子性如果不是就要加锁。原子性就是动作不能再继续被拆分了读是原子性写也是原子性但是读加上写就不是原子性。
http://www.w-s-a.com/news/97856/

相关文章:

  • 哪家做网站性价比高wordpress最新文章链接插件
  • 维修网站怎么做移动互联网应用程序指的是什么
  • 张家界建设网站门户网站的建设原理
  • 企业通用网站模板湖南网站建设企业
  • 能看网站的视频app如何运行asp网站
  • 公司做网站还是做阿里好呢国外的旅游网站做的如何
  • 怎么做wep网站长沙seo排名公司
  • 海南网站网络推广做转运网站
  • 门户网站方案用户等待网站速度
  • 哈尔滨专业建网站方案深圳生活免费信息网
  • 检测网站是否被挂黑链wordpress 网址分享
  • 网站建设贵阳东莞网站建设策划
  • 网站5建设需要学什么桃城网站建设公司
  • 杭州外贸网站企业门户网站的安全性
  • 建设论坛网站需要做什么水果电商网站建设相关文献
  • 群晖 nas 做网站建设网站的报价
  • 白山做网站网站建设 app 优化
  • 畜牧业网站建设官方网站下载拼多多app
  • 网站规划和布局备案网站地址
  • 站长工具流量统计招工信息发布平台
  • 上海网站建设公司排行建设无障碍网站
  • phpcms网站打不开网页制作网站设计稿
  • 博客网站开发环境wordpress 中英文双语
  • 做网站报价表群辉装wordpress
  • 请人做游戏的网站视觉设计师的工作内容
  • 昆明网站建设知名企业博客网站开发
  • 如何做网站网页免费thinkphp网站后台模板
  • 怎么自己做优惠券网站济南小程序开发
  • 南昌网站专业制作做仿站如何获取网站源码
  • qq钓鱼网站wordpress 企业站模板