精华内容
下载资源
问答
  • Kubernetes对象模型
    万次阅读
    2018-10-13 20:44:20

    转载请标明出处:
    http://blog.csdn.net/forezp/article/details/83042018
    本文出自方志朋的博客

    Kubernetes对象

    个人博客纯净版:https://www.fangzhipeng.com/kubernetes/2018/10/13/k8s-object-model.html

    在之前的文章已经讲到了很多Kubernets对象,包括pod,service,deployment等等。Kubernets对象是一种持久化,表示集群状态的实体。它是一种声明式的意图的记录,一般使用yaml文件描述对象,它使用Kubernetes对象来表示集群的状态,通过API/kubectl管理Kubernetes对象。

    在这里插入图片描述

    name和uid

    在Kubernetes对象模型中,使用了name和uid作为对象的唯一标识,其中name在同一种对象中是唯一的,在不同类型对象可以是相同的;uid是唯一标识的。

    在API中对象的访问路径:/api/{version}/namespaces/{namespaxe/{object-kind}/name,比如:/api/v1/namespace/default/pods/hello-kubernetes

    在Kubernetes集群的整个生命周期内创建的每个对象实例都具有不同的UID.

    Namespace(名字空间)

    Namesapce,不仅仅是一个属性,本身也是一个object。

    • Namesapce:用于将物理集群划分为多个虚拟集群。
    • Namespace间完全隔离,因此也常被用来隔离不同的用户以及权限。
    • Kubernetes内置了三个Namesapces:default、kube-system和kube-public,Node和PersistentVolume不属于任何namespace。

    Label(标签)

    Label用于建立集群对象之间的灵活、松耦合的多维关联关系。

    • 一个label是一个键-值对,其中的key、value均由用户自己定义。
    • lable可以附着在任何对象上,每个对象也可以有任意个标签。标签可在对象定义时附加上,也可以通过命令动态管理标签。
    • label可以将有组织目的的结构映射到集群对象上,从而形成一个与现实世界管理结构同步对应松耦合的、多维的对象管理结构。

    通过lable selector 查询和筛选建立对象间的关系的。

    在这里插入图片描述

    如上图所示,有两个service1和 service2,对应的pod有标签release:stable和标签release:rc-1,通过selector,就可以筛选出相应的标签的pod。而pod由通过nodeselector筛选出不同环境的node。

    Annotations

    Annotations:可以将任意非标识性元数据附加到对象上。

    • Annotations也是以键值对的形式呈现。
    • 工具和库可以检索并使用这些Annotations元数据
    • 将数据作为Annotations附着在对象上,有利于创建一些用于部署、管理和做内部检查的共享工具和客户端。

    Kubernetes对象分类

    常用的对象分类有以下几种:

    • workload类,即工作负载类
      • pod
      • controller
      • deployment
      • stateful
      • daemonset
      • job
    • discovery&loadbalance类,与服务相关的对象
      • service
      • endpoint
      • ingress
    • config&storage,向应用初始化配置话信息
      • configmap
      • secret
      • volume
      • persistentVolumeClaim
    • cluster,集群类对象
      • Node
      • namespace
      • persitenceVolume
      • clusterRole
      • ClusterRoleVindeing
      • ResoruceQuota

    工作负载,以pod为中心

    pod是一个有特定关系的容器集合。

    • Pod是集群中可以创建和部署的最小且最简单的Kubernetes对象的单元。
    • Pod也是一种封装。它封装了应用容器,存储资源、独立的网络IP以及决定容器如何运行的策略选项。
    • 每个pod中预置了一个Pause容器,其namespace、IPC资源、网络和存储资源被pod内其它容器共享。Pod中的所有容器紧密协作,并且作为一个整体被管理、调度和运行。

    pod的生命周期

    pod是一个非持久化实体。

    在这里插入图片描述

    如图所示,pod有如下几个生命周期:

    • pending,即挂起,即pod对象已经被kubernetes所接受,但有一个或者多个pod尚未创建。
    • running,运行中,pod已经绑定到node上,所有pod中所有容器已经创建
    • succeed,成功状态,pod的所有的容器已经成功终止。
    • failed,失败状态,即有最少又一个容器正常退出。

    service

    pod是一个非持久化的实体,pod随时都有可能被销毁掉或者重新创建,所以pod的所在节点是不确定的,为了防止因pod的提供服务不确定性而采用了地址唯一的service用来提供服务,service可以通过负载均衡的调用它背后的pod对象,从而提供稳定的服务。

    servie是与云原生应用中“微服务”概念一一对应。

    • kubernetes集群为每一个service分配一个集群唯一的IP地址,在 service的生命周期内,该ip地址不变;在内部DNS指出下,轻松实现服务发现机制。
    • service通过label selector关联到实际支撑业务运行的pod上,并通过集群内置的服务负载均衡分发到后端pod上。
    • 通过nodeport或者设置loadbalance机制实现集群外部对service的访问。

    controllers

    controller是kubernetes的核心对象之一。

    • controller用于保证集群内一组pod能始终按照某种期望的状态正常运行
    • 状态包括:Pod副本数量、节点选择、资源约束、持久化数据运维等
    • kubernetes支持多种controller,常用的deployment、replicaseet、statefulset、daemonset等。

    ReplicaSet

    ReplicaSet:确保健康Pod的副本始终满足用户定义的数量。

    • 前身是ReplicationController()rc
    • 相比rc,增加了集合式label selector的支持。
    • 支持单独使用,但更多隐藏在Deployment控制器后面,由deployment自动管理。

    Deployment

    Deployment:为pod和 ReplicaSet提供声明式的定义。

    • 用户在deployment文件中描述期望状态,Deployment Controller就会自动将Pod和Replica Set的实际状态改变到期望状态。
    • Deployment支持Pod的滚动更新,并自动管理背后的ReplicaSet
    • Deployment支持将Pod滚动到任意版本。

    StatefulSet

    StatefulSet:提供对有状态应用的部署和控制的支持,1.9版本GA,正式毕业。可以用于生产环境中。

    • 使用场景:文档的持久化存储,稳定的网络标志,有序部署有序扩展,有序收缩有序删除,有序自动滚动升级等。
    • Pod的存储必须由PersistentVolume Provisioner根据请求的Storage Class 进行配置,或由管理员预先配置好。
    • 考虑数据安全性,伸缩或删除StatefulSey不会删除关联的存储;另外StartefulSet目前要求Headless Service 负责Pod的网络身份,用户有责任创建此服务。

    DaemonSet

    保证在每个Node上都运行一个Pod副本。

    • 适用于系统Daemon程序、系统跟踪、日志收集等
    • Kubernetes1.6之后,可设置更新策略:支持滚动更新
    • 可指定Node:nodeSelector、nodeAffinity、podAffinity

    ConfigMap

    常用来向pod提供非敏感的配置信息。

    • ConfigMap用于保存配置数据的键值对,可以用来保存单个,也可以用来保存配置文件。
    • ConfigMap可以使用命令行基于字面值、文件或者目录来创建或者通过configmap对象定义文件创建。
    • ConfigMap可以通过三种形式在pod中使用:环境变量、容器命令行参数货以文件形式通过数据卷插件挂载到pod中。

    Secret

    secret解决的事集群内密码、token、密钥等敏感数据的配置问题。

    • 常用于与ServiceAccount关联,存储在tmpfs文件系统中,Pod删除后sercret文件也会对应删除
    • 支持opaque,kubernetes.io/Service Account,kubernetes.io/dockerconfigjson三种类型。

    总结

    本文主要对Kubernetes的对象模型进行一个初略的讲解。后续文章会对重点对象模型进行一个详细的讲解或者实战的演示。

    更多阅读

    史上最简单的 SpringCloud 教程汇总

    SpringBoot教程汇总

    Java面试题系列汇总


    扫码关注有惊喜

    (转载本站文章请注明作者和出处 方志朋的博客

    更多相关内容
  • 比如本文我们要讨论的JVM内存结构、Java内存模型和Java对象模型,这就是三个截然不同的概念,但是很多人容易弄混。可以这样说,很多高级开发甚至都搞不不清楚JVM内存结构、Java内存模型和Java对象模型这三者的概念及...

    Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模型和Java对象模型,这就是三个截然不同的概念,但是很多人容易弄混。


    可以这样说,很多高级开发甚至都搞不不清楚JVM内存结构、Java内存模型和Java对象模型这三者的概念及其间的区别。甚至我见过有些面试官自己也搞的不是太清楚。不信的话,你去网上搜索Java内存模型,还会有很多文章的内容其实介绍的是JVM内存结构。

    首先,这三个概念是完全不同的三个概念。本文主要对这三个概念加以区分以及简单介绍。其中每一个知识点都可以单独写一篇文章,本文并不会深入介绍,感兴趣的朋友可以加入我的知识星球和球友们共同学习。


    JVM内存结构

    我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。

    其中有些区域随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁。在《Java虚拟机规范(Java SE 8)》中描述了JVM运行时内存区域结构如下:


    各个区域的功能不是本文重点,就不在这里详细介绍了。这里简单提几个需要特别注意的点:

    1、以上是Java虚拟机规范,不同的虚拟机实现会各有不同,但是一般会遵守规范。

    2、规范中定义的方法区,只是一种概念上的区域,并说明了其应该具有什么功能。但是并没有规定这个区域到底应该处于何处。所以,对于不同的虚拟机实现来说,是有一定的自由度的。

    3、不同版本的方法区所处位置不同,上图中划分的是逻辑区域,并不是绝对意义上的物理区域。因为某些版本的JDK中方法区其实是在堆中实现的。

    4、运行时常量池用于存放编译期生成的各种字面量和符号应用。但是,Java语言并不要求常量只有在编译期才能产生。比如在运行期,String.intern也会把新的常量放入池中。

    5、除了以上介绍的JVM运行时内存外,还有一块内存区域可供使用,那就是直接内存。Java虚拟机规范并没有定义这块内存区域,所以他并不由JVM管理,是利用本地方法库直接在堆外申请的内存区域。

    6、堆和栈的数据划分也不是绝对的,如HotSpot的JIT会针对对象分配做相应的优化。

    如上,做个总结,JVM内存结构,由Java虚拟机规范定义。描述的是Java程序执行过程中,由JVM管理的不同数据区域。各个区域有其特定的功能。


    Java内存模型

    Java内存模型看上去和Java内存结构(JVM内存结构)差不多,很多人会误以为两者是一回事儿,这也就导致面试过程中经常答非所为。

    在前面的关于JVM的内存结构的图中,我们可以看到,其中Java堆和方法区的区域是多个线程共享的数据区域。也就是说,多个线程可能可以操作保存在堆或者方法区中的同一个数据。这也就是我们常说的“Java的线程间通过共享内存进行通信”。

    Java内存模型是根据英文Java Memory Model(JMM)翻译过来的。其实JMM并不像JVM内存结构一样是真实存在的。他只是一个抽象的概念。JSR-133: Java Memory Model and Thread Specification 中描述了,JMM是和多线程相关的,他描述了一组规则或规范,这个规范定义了一个线程对共享变量的写入时对另一个线程是可见的。

    那么,简单总结下,Java的多线程之间是通过共享内存进行通信的,而由于采用共享内存进行通信,在通信过程中会存在一系列如可见性、原子性、顺序性等问题,而JMM就是围绕着多线程通信以及与其相关的一系列特性而建立的模型。JMM定义了一些语法集,这些语法集映射到Java语言中就是volatile、synchronized等关键字。

    在JMM中,我们把多个线程间通信的共享内存称之为主内存,而在并发编程中多个线程都维护了一个自己的本地内存(这是个抽象概念),其中保存的数据是主内存中的数据拷贝。而JMM主要是控制本地内存和主内存之间的数据交互的。


    在Java中,JMM是一个非常重要的概念,正是由于有了JMM,Java的并发编程才能避免很多问题。这里就不对Java内存模型做更加详细的介绍了,想了解更多的朋友可以参考《Java并发编程的艺术》。

     Java对象模型



    Java是一种面向对象的语言,而Java对象在JVM中的存储也是有一定的结构的。而这个关于Java对象自身的存储模型称之为Java对象模型。

    HotSpot虚拟机中,设计了一个OOP-Klass Model。OOP(Ordinary Object Pointer)指的是普通对象指针,而Klass用来描述对象实例的具体类型。

    每一个Java类,在被JVM加载的时候,JVM会给这个类创建一个instanceKlass,保存在方法区,用来在JVM层表示该Java类。当我们在Java代码中,使用new创建一个对象的时候,JVM会创建一个instanceOopDesc对象,这个对象中包含了对象头以及实例数据。

    =

    这就是一个简单的Java对象的OOP-Klass模型,即Java对象模型。

    总结

    我们再来区分下JVM内存结构、 Java内存模型 以及 Java对象模型 三个概念。

    JVM内存结构,和Java虚拟机的运行时区域有关。
    Java内存模型,和Java的并发编程有关。
    Java对象模型,和Java对象在虚拟机中的表现形式有关。

    展开全文
  • JVM成神之路-Java对象模型

    千次阅读 2018-07-23 15:01:17
    在jvm的内存结构中,对象保存在堆中,而我们在对对象进行操作时,其实操作的是对象的引用。 Java对象包含三个部分 一个Java对象可以分为三部分存储在内存中,分别是:对象头(Header)、实例数据(Instance Data)和...

    首先我们要知道:

    在jvm的内存结构中,对象保存在堆中,而我们在对对象进行操作时,其实操作的是对象的引用。

    Java对象包含三个部分

    一个Java对象可以分为三部分存储在内存中,分别是:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。

    1. 对象头(包含锁状态标志,线程持有的锁等标志)
    2. 实例数据
    3. 对齐填充

    oop-klass model(hotspot jvm中的对象模型)

    Java虚拟机的底层是使用c++实现,而jvm并没有根据一个Java的实例对象去创建对应的c++对象,而是设计了一个oop-klass model ;

    1. OOP(Ordinary Object Pointer):普通对象指针; 表示一个实例信息
    2. Klass:描述对象实例的具体类型, 含了元数据和方法信息
    3. 创建目的:不想让每个对象中都含有一个vtable(虚函数表)

    类就是一类事物的抽象概括。

    OOP体系:

    1. OOPs模块中包含了多个子模块,每个子模块对应一个类型,每一个类型的OOP都代表一个在JVM内部使用的特定对象的类型。
    2. 在Java程序运行过程中,每创建一个新的对象,在JVM内部就会相应的创建一个对应类型的OOP对象。

    代码:

    1. typedef class oopDesc* oop;

    // 定义了oop共同的基类,其他的类型都是它的子类

    1. typedef class instanceOopDesc* instanceOop;

    /* 表示一个Java类型实例,每当我们new一个对象时,

    JVM都会创建一个instanceOopDesc */

    1. typedef class methodOopDesc* methodOop;

    // 表示一个Java方法

    1. typedef class constMethodOopDesc* constMethodOop;

    // 表示一个Java方法中的不变信息

    1. typedef class MethodDataOopDesc* methodDataOop;

    // 记录性能信息的数据结构

    1. typedef class arrayOopDesc* arrayOop;

    /* 定义了数组oops的抽象基类,下面两个类相当于此类的子类,

    new一个数组时会建立此对象*/

    1. typedef class objArrayOopDesc* objArrayOop;

    // 表示持有一个oops数组,对应存储对象的数组

    1. typedef class typeArrayOopDesc* typeArrayOop;

    // 表示容纳基本类型的数组,对应存储基本类型的数组

    1. typedef class constantPoolOopDesc* constantPoolOop;

    // 表示在class文件中描述的常量池

    1. typedef class constantPoolCacheOopDesc* constantPoolCacheOop;

    // 常量池缓存

    1. typedef class klassOopDesc* klassOop;

    // 描述一个与Java类对等的C++类

    1. typedef class markOopDesc* markOop;

    // 表示对象头

    OopDesc结构:

    class oopDesc {

     friend class VMStructs;

            private:

    /*

    * 实际上也是代表了instanceOopDesc、arrayOopDesc和OopDesc

    * 包含了markOop _mark和union_matadata两部分

    */

    volatile markOop _mark; // 保存锁标记、gc分代等信息

    union _metadata { wideKlassOop _klass; // 普通指针,

    // 压缩类指针,和普通指针都指向instanceKlass 对象

    narrowOop _compressed_klass; } _metadata;

    private:

     // 实例数据保存的位置

    void* field_base(int offset) const;

    jbyte* byte_field_addr(int offset) const;

    jchar* char_field_addr(int offset) const;

    jboolean* bool_field_addr(int offset) const;

    jint* int_field_addr(int offset) const;

    jshort* short_field_addr(int offset) const;

    jlong* long_field_addr(int offset) const;

    jfloat* float_field_addr(int offset) const;

    jdouble* double_field_addr(int offset) const;

    address* address_field_addr(int offset) const; }

    /* instanceOopDesc和arrayOopDesc都直接继承了oopDesc,

    都没有增加其他的数据结构 */

    class instanceOopDesc : public oopDesc {

    }

    class arrayOopDesc : public oopDesc { }

    1. 职能:表示对象的实例数据,不含任何虚函数
    2. 对象在内存中的基本形式就是oop
    3. 对象所属的类也是一种oop,即klassOop,对应的klass是klassKlass

    Klass体系:

    结构:

    • class Klass;

    // klassOop的一部分,用来描述语言层的类型,其他所有类的父类

    • class instanceKlass;

    // 在虚拟机层面描述一个Java类,每一个已加载的Java类都会创建一个此对象,

    // 在JVM层表示Java类

    • class instanceMirrorKlass;

    // 专有instantKlass,表示java.lang.Class的Klass

    • class instanceRefKlass;

    // 专有instantKlass,表示java.lang.ref.Reference的子类的Klass

    • class methodKlass; // 表示methodOop的Klass
    • class constMethodKlass; // 表示constMethodOop的Klass
    • class methodDataKlass; // 表示methodDataOop的Klass
    • class klassKlass; // 最为klass链的端点,klassKlass的Klass就是它自身
    • class instanceKlassKlass; // 表示instanceKlass的Klass
    • class arrayKlassKlass;

    // 表示arrayKlass的Klass

    • class objArrayKlassKlass; // 表示objArrayKlass的Klass
    • class typeArrayKlassKlass; // 表示typeArrayKlass的Klass
    • class arrayKlass; // 表示array类型的抽象基类
    • class objArrayKlass; // 表示objArrayOop的Klass
    • class typeArrayKlass; // 表示typeArrayOop的Klass
    • class constantPoolKlass; // 表示constantPoolOop的Klass
    • class constantPoolCacheKlass;

    // 表示constantPoolCacheOop的Klass

    功能:

        • 实现语言层面的Java类(在Klass基类中已经实现)
        • 实现Java对象的分发功能(由Klass子类提供虚函数实现)

    目的:为了实现虚函数多态,提供了虚函数表。

    • instanceKlass的内部结构:
    • objArrayOop _methods;

    // 类拥有的方法

    • typeArrayOop _method_ordering;

    //描述方法顺序

    • objArrayOop _local_interfaces;

    //实现的接口

    • objArrayOop _transitive_interfaces;

    //继承的接口

    • typeArrayOop _fields;

    //域

    • constantPoolOop _constants;

    //常量

    • oop _class_loader;

    //类加载器

    • oop _protection_domain;

    //protected域

    ....

    HotSpotJVM的设计这把对象一拆为二,分为Klass和oop,其中oop的只能主要在于表示对象的实例数据,所以其中不含有任何虚函数,而klass为了实现虚函数多态,所以提供了虚函数表。所以,关于java的多态,其实也有虚函数的影子在。

    instanceKlass

    JVM在运行时,需要一种用来标识Java内部类型的机制。在HotSpot中的解决方案是:为每一个已加载的Java类创建一个instanceKlass对象,用来在JVM层表示Java类。

    结构:

    //类拥有的方法列表

      objArrayOop     _methods;

      //描述方法顺序

      typeArrayOop    _method_ordering;

      //实现的接口

      objArrayOop     _local_interfaces;

      //继承的接口

      objArrayOop     _transitive_interfaces;

      //域

      typeArrayOop    _fields;

      //常量

      constantPoolOop _constants;

      //类加载器

      oop             _class_loader;

      //protected域

      oop             _protection_domain;

          ....

    在JVM中,对象在内存中的基本存在形式就是oop。那么,对象所属的类,在JVM中也是一种对象,因此它们实际上也会被组织成一种oop,即klassOop。同样的,对于klassOop,也有对应的一个klass来描述,它就是klassKlass,也是klass的一个子类。

    klassKlass作为oop的klass链的端点。关于对象和数组的klass链大致如下图:

    oop-klass-klassKlass关系图:

    符号引用

    符号引用就是用一组符号来描述所引用的目标,我们都知道在Java中,通常情况下我们写的一个Java类被编译以后都是一个class文件,在编译的时候,Java类并不知道所引用的类的实际地址,因此只能使用符号引用来代替。

    一般一个对象的创建就是从new开始的,而操作这些创建指令的就是jvm了,首先当你开始new的时候,jvm会先去查找一个符号引用,如果找不到这个符号引用就说明这个类还没有被加载,因此jvm就会进行类加载,然后符号引用被解析完成,紧接着jvm会为对象在堆内存中分配内存,也就是说我们这个user对象就在堆内存中有一块内存空间了。

    HotSpot虚拟机实现的Java对象包括三个部分:对象头,实例字段和对齐填充

    为对象分配完堆内存之后,jvm会将该内存进行零值初始化。

    内存存储:

    关于一个Java对象,他的存储是怎样的,一般很多人会回答:对象存储在堆上。稍微好一点的人会回答:对象存储在堆上,对象的引用存储在栈上。今天,再给你一个更加显得牛逼的回答:

    对象的实例(instantOopDesc)保存在堆上,对象的元数据(instantKlass)保存在方法区,对象的引用保存在栈上。

    其实如果细追究的话,上面这句话有点故意卖弄的意思。因为我们都知道。方法区用于存储虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 所谓加载的类信息,其实不就是给每一个被加载的类都创建了一个 instantKlass对象么。

    示例

    class Model{
    public static int a = 1;
    private final int NUMBER = 2;
    public int b;
    public int c = 3;
    
    public Model(int b){
    this.b = b;
    }
    
    public static void main(String[] args){
    int d = 10;
    Model modelA = new Model(2);
    Model modelB = new Model(3);
    }
    }
    

    存储结构:

    总结:

    在Java中,JVM中的对象模型包含两部分:Oop和Klass,在类被加载的时候,JVM会给类创建一个instanceKlass,其中包含了类信息、常量、静态变量、即时编译器编译后的代码等,存储在方法区,用来在JVM层表示该Java类。而使用new一个对象后,JVM就会创建一个instanceOopDesc对象,该对象包含对象头和实例数据,对象头中保存的是锁的状态标志等信息,元数据则实际上是一个指针,指向instanceKlass

    Java对象模型---对象头(Mark Word)

    对象自身的运行时数据

    这部分存储包括哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。这部分数据被官方称为Mark Word,在32位和64位的虚拟机中的大小分别为32bit和64bit。

    由于对象头信息是与对象自身定义的数据无关的额外存储成本,考虑到虚拟机的空间效率,Mark Word被设计成一个非固定的数据结构以提高存储空间的利用率。即这部分数据会根据对象的状态来分配存储空间。

    对象的类型指针

    即指向对象的类元数据的指针。虚拟机可以通过该指针判定对象实例属于哪个类。

    在Java对象中比较特殊的是Java数组,一个数组实例的对象头中必须记录数组的长度。JVM可以通过对象头中的数组长度数据来判定数组的大小,这是访问数组类型的元数据无法得到的。

    对象的实例数据

    前面提到对象头是对象的额外开销,只有实例数据才是一个对象实例存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。这部分内容同时记录了子类从父类继承所得的各类型数据。

    填充

    对齐填充在对象数据中并不是必然的,只是起着占位符的作用,没有特别含义。HotSpot要求对象起始地址必须是8字节的整数倍。对象头的大小刚好符合要求,因此当实例数据没有对齐时,就需要通过填充来对齐数据。

    获取类的元数据

    虚拟机在加载类的时候会将类的信息、常量、静态变量和即时编译器编译后的代码等数据存储在方法区(Method Area)。类的元数据,即类的数据描述,也被存在方法区。我们知道对象头中会存有对象的类型指针,通过类型指针可以获取类的元数据。因此,对象的类型指针其实指向的是方法区的某个存有类信息的地址。

    但是,并不是每个对象实例都存有对象的类型指针。根据对象访问定位方法的不同,对象的类型指针被存放在不同的区域。

    • 通过句柄访问对象
      • 对象的类型指针被存放在句柄池中;
    • 通过Reference指针直接访问对象
      • 对象的类型指针被存放在对象本身的数据中。

    比较来说:

    • 使用句柄访问的最大好处就是reference中存储的是稳定的句柄地址,当对象被移动(垃圾收集时会经常移动对象)时智慧改变句柄中实例数据执政,而reference本身不需要修改。
    • 使用直接指针访问方式的最大好处就是速度快,节省了一次指针定位的时间开销(对象的访问在java中也非常频繁)

    因此,Java的对象数据存储可以理解为:

    • 引用类型(指向对象的Reference)
      • 存储在栈中
    • 对象的类的元数据 (Class MetaData)
      • 存储在方法区中
    • 对象的实例数据
      • 存储在堆中

    对象内存布局

    • 存储的是与对象本身定义的数据无关的额外存储成本,其数据结构不固定。
    • 32位JVM中,对象不同装填的mark word各个比特位区间图示如下:

    对象五种状态:无锁态、轻量级锁、重量级锁、GC标记和偏向锁。

    HotSpot中对象头主要包含两部分

    第一:

    用于存储对象自身的运行时数据,如上表中的对象哈希码,对象分代年龄,偏向线程id,偏向时间戳等。

    第二:

    类型指针了,我们看表中也有指针字样,那么这部分主要就是杜希昂指向它的类元数据的指针了,虚拟机就是通过这个指针来确定这个对象时那个实例。

    偏向锁和重量级锁

    • 偏向锁:主要解决无竞争下的锁性能问题
      • 按照HotSpot设计,每次加锁/解锁都会涉及到一些CAS操作,CAS操作会延迟本地调用
      • 偏向锁会偏向第一个访问锁的程序,如果接下来的运行过程中,该锁没有被其他线程访问,则持有偏向锁的线程将永远不需要触发同步。
      • 但是如果在运行过程中,遇到了其他线程抢占锁,则持有偏向锁的线程会被挂起,JVM会尝试消除它身上的偏向锁,将锁恢复到标准的轻量级锁
      • 只能在单线程中起作用
    • 轻量级锁:为了在无多线程竞争的环境中使用CAS来替代synchronized。减少传统的重量级锁使用操作系统互斥量产生的性能消耗,是为了减少多线程进入互斥的几率。并非替代互斥。

    参考资料:

    《深入理解Java虚拟机》

    http://www.cnblogs.com/chenyangyao/p/5245669.html

    深入理解多线程(二)—— Java的对象模型-HollisChuang's Blog

    深入理解多线程(三)—— Java的对象头-HollisChuang's Blog

     

    展开全文
  • 两大类数据模型客观对象的抽象过程---两步抽象3.数据模型的组成要素(1)数据结构(2)数据操作(3)数据的完整性约束条件4.概念模型(1)用途与基本要求(2) 信息世界中的基本概念(3)两个实体型之间的联系① 一对一联系(1:1...


    0.思维导图

    在这里插入图片描述

    1.数据模型的概念

    • 在数据库中用数据模型这个工具来抽象、表示和处理现实世界中的数据和信息。
    • 通俗地讲数据模型就是现实世界的模拟

    数据模型应满足三方面要求:

    • 能比较真实地模拟现实世界
    • 容易为人所理解
    • 便于在计算机上实现

    2.两大类数据模型

    数据模型分为两类(分属两个不同的层次)

    • (1) 概念模型 也称信息模型,它是按用户的观点来对数据和信息建模,用于数据库设计。
    • (2) 逻辑模型物理模型
      逻辑模型主要包括网状模型层次模型关系模型面向对象模型等,按计算机系统的观点对数据建模,用于DBMS实现。
      物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁带上的存储方式和存取方法。

    客观对象的抽象过程—两步抽象

    • 现实世界中的客观对象抽象为概念模型
    • 概念模型转换为某一DBMS支持的数据模型
      在这里插入图片描述

    3.数据模型的组成要素

    (1)数据结构

    数据结构是所研究的对象类型的集合。这些对象是数据库的组成成分,数据结构指对象和对象间联系的表达和实现,是对系统静态特征的描述,包括两个方面:
    (1)数据本身:类型、内容、性质。例如关系模型中的域、属性、关系等。
    (2)数据之间的联系:数据之间是如何相互关联的,例如关系模型中的主码、外码联系等。

    (2)数据操作

    数据操作

    • 对数据库中各种对象(型)实例(值)允许执行的操作,及有关的操作规则

    数据操作的类型

    • 查询
    • 更新(包括插入、删除、修改)

    (3)数据的完整性约束条件

    • 数据的完整性约束条件是一组完整性规则的集合,规定数据库状态及状态变化所应满足的条件,以保证数据的正确性、有效性和相容性。

    完整性规则:给定的数据模型中数据及其联系所具有的制约和储存规则

    4.概念模型

    (1)用途与基本要求

    概念模型的用途:

    • 概念模型用于信息世界的建模
    • 是现实世界到机器世界的一个中间层次
    • 是数据库设计的有力工具
    • 数据库设计人员和用户之间进行交流的语言

    对概念模型的基本要求:

    • 较强的语义表达能力
    • 能够方便、直接地表达应用中的各种语义知识
    • 简单、清晰、易于用户理解

    (2) 信息世界中的基本概念

    • (1) 实体(Entity)
      客观存在并可相互区别的事物称为实体。
      可以是具体的人、事、物或抽象的概念。
    • (2) 属性(Attribute)
      实体所具有的某一特性称为属性。
      一个实体可以由若干个属性来刻画。
    • (3) (Key)
      唯一标识实体的属性集称为码。
      (4) (Domain)
      属性取值范围称为该属性的域。
    • (5) 实体型(Entity Type)
      实体名及其属性名集合来抽象和刻画同类实体称为实体型
    • (6) 实体集(Entity Set)
      同一类型实体的集合称为实体集
    • (7) 联系(Relationship)
      • 现实世界中事物内部以及事物之间联系在信息世界中反映为实体内部的联系和实体之间的联系。
      • 实体内部的联系通常是指组成实体的各属性之间的联系
      • 实体之间的联系通常是指不同实体集之间的联系

    (3)两个实体型之间的联系

    在这里插入图片描述

    ① 一对一联系(1:1)

    实例

    • 一个班级只有一个正班长
    • 一个班长只在一个班中任职
      在这里插入图片描述

    定义:
    如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然。则称实体集A与实体集B具有一对一联系,记为1:1

    ② 一对多联系(1:n)

    实例

    • 一个班级中有若干名学生,
    • 每个学生只在一个班级中学习
      在这里插入图片描述
      定义:
      如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1:n

    ③ 多对多联系(m:n)

    实例

    • 课程与学生之间的联系:
    • 一门课程同时有若干个学生选修
    • 一个学生可以同时选修多门课程
      在这里插入图片描述
      定义:
      如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体B具有多对多联系,记为m:n

    (4)两个以上实体型之间的联系

    ① 一对多联系(1:m||1:n)

    • 若实体集E1,E2,…,En存在联系,对于实体集Ej(j=1,2,…,i-1i+1,…,n)中的给定实体,最多只和Ei中的一个实体相联系,则我们说Ei与E1E2,…,Ei-1,Ei+1,…,En之间的联系是一对多的。

    实例

    • 课程、教师与参考书三个实体型
      一门课程可以有若干个教师讲授,
      使用若干本参考书,
      每一个教师只讲授一门课程,
      每一本参考书只供一门课程使用

    在这里插入图片描述

    ② 一对一联系(1:1:1)

    实例

    • 一个独生子女只有一个父亲,一个母亲
    • 一个父亲也只有一个独生子女
    • 一个母亲也只有一个独生子女
      在这里插入图片描述

    ③ 多对多联系(m:n:p)

    实例
    供应商、项目、零件三个实体型
    一个供应商可以供给多个项目多种零件
    每个项目可以使用多个供应商供应的零件
    每种零件可由不同供应商供给
    在这里插入图片描述

    (5)单个实体型内的联系

    ① 一对多联系(1:n)

    实例
    职工实体型内部具有领导与被领导的联系
    某一职工(干部)“领导”若干名职工
    一个职工仅被另外一个职工直接领导
    这是一对多的联系

    在这里插入图片描述

    ② 一对一联系(1:1)

    • 身份证可以唯一确认一个人的身份,人与身份证有确认和被确认的关系
    • 一个身份证唯一确定一个人
    • 一个人也唯一确认一个身份证
      在这里插入图片描述

    ③ 多对多联系 (m:n)

    • 饮料和厂商之间有制造和被制造的关系
    • 多个饮料可以被多个厂商制造
    • 多个厂商可以制造出多种饮料
      在这里插入图片描述

    (6)概念模型的一种表示方法

    ① 实体-联系方法(E-R方法)

    • E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用E-R图来描述现实世界的概念模型
    • E-R方法也称为E-R模型

    ② 实体型

    用矩形表示,矩形框内写明实体名。
    在这里插入图片描述

    ③ 属性

    用椭圆形表示,并用无向边将其与相应的实体连接起来
    在这里插入图片描述

    ④ 联系

    • 联系本身:
      用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n)
      在这里插入图片描述

    ⑤ 联系的表示方法

    在这里插入图片描述

    ⑥ 联系的表示方法示例

    在这里插入图片描述

    ⑦ 联系的属性

    • 联系本身也是一种实体型也可以有属性。如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来
      在这里插入图片描述

    ⑧ 一个实例

    用E-R图表示某个工厂物资管理的概念模型

    • 实体
      仓库: 仓库号、面积、电话号码
      零件 :零件号、名称、规格、单价、描述
      供应商:供应商号、姓名、地址、电话号码、帐号
      项目:项目号、预算、开工日期
      职工:职工号、姓名、年龄、职称

    实体之间的联系如下:

    • (1)一个仓库可以存放多种零件,一种零件可以存放在多个仓库中。仓库和零件具有多对多的联系。用库存量来表示某种零件在某个仓库中的数量。
      (2)一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作,仓库和职工之间是一对多的联系。职工实体型中具有一对多的联系
      (3)职工之间具有领导-被领导关系。即仓库主任领导若干保管员。
      (4)供应商、项目和零件三者之间具有多对多的联系
      在这里插入图片描述

    5.非关系模型

    (1)层次模型(Hierarchical Model)

    • 层次模型是数据库系统中最早出现的数据模型
    • 层次数据库系统的典型代表是IBM公司的IMS(Information Management System)数据库管理系统
    • 层次模型用树形结构来表示各类实体以及实体间的联系

    ① 数据结构

    满足下面两个条件的基本层次联系的集合为层次模型

    • 有且只有一个结点没有双亲结点,这个结点称为根结点
    • 根以外的其它结点有且只有一个双亲结点

    层次模型中的几个术语
    根结点,双亲结点,兄弟结点,叶结点
    在这里插入图片描述

    ② 特点

    • 结点的双亲是唯一
    • 只能直接处理一对多的实体联系
    • 每个记录类型可以定义一个排序字段,也称为·码字段
    • 任何记录值只有按其路径查看时,才能显出它的全部意义
    • 没有一个子女记录值能够脱离双亲记录值而独立存在

    在这里插入图片描述
    在这里插入图片描述

    ③ 多对多联系在层次模型中的表示

    方法:

    • 将多对多联系分解成一对多联系

    分解方法:

    • 冗余结点法
    • 虚拟结点法

    ④ 数据操纵与完整性约束

    层次模型的数据操纵:

    • 查询
    • 插入
    • 删除
    • 更新

    层次模型的完整性约束条件:

    • 无相应的双亲结点值就不能插入子女结点值
    • 如果删除双亲结点值,则相应的子女结点值也被同时删除
    • 更新操作时,应更新所有相应记录,以保证数据的一致性

    ⑤ 存储结构

    邻接法:
    按照层次树前序遍历(T-L-R)的顺序把所有记录值依次邻接存放,即通过物理空间的位置相邻来实现层次顺序。又可分为:子女-兄弟链接法层次序列链接法

    在这里插入图片描述

    ❶ 子女-兄弟链接法
    • 每个记录设两类指针,分别指向最左边的子女(每个记录型对应一个)和最近的兄弟
      在这里插入图片描述
    ❷ 层次序列链接法
    • 按树的前序穿越顺序链接各记录值
      在这里插入图片描述

    ⑥ 优缺点

    • 优点:
      层次模型的数据结构比较简单清晰
      查询效率高,性能优于关系模型,不低于网状模型
      层次数据模型提供了良好的完整性支持
    • 缺点:
      多对多联系表示不自然
      插入删除操作的限制多,应用程序编写比较复杂
      查询子女结点必须通过双亲结点
      由于结构严密,层次命令趋于程序化

    (2)网状模型(Network Model)

    网状数据库系统采用网状模型作为数据的组织方式

    • 典型代表是DBTG系统:
      亦称CODASYL系统
      70年代由DBTG提出的一个系统方案
      奠定了数据库系统的基本概念、方法和技术
    • 实际系统:
      Cullinet Software Inc.公司的 IDMS
      Univac公司的 DMS1100
      Honeywell公司的IDS/2
      HP公司的IMAGE

    ① 数据结构

    网状模型:
    满足下面两个条件的基本层次联系的集合:

    1. 允许一个以上的结点无双亲;
    2. 一个结点可以有多于一个的双亲。

    表示方法(与层次数据模型相同):
    实体型:用记录类型描述
    每个结点表示一个记录类型(实体)
    属性:用字段描述
    每个记录类型可包含若干个字段
    联系:用结点之间的连线表示记录类型(实体)之
    间的一对多的父子联系

    网状模型与层次模型的区别:

    • 网状模型允许多个结点没有双亲结点
    • 网状模型允许结点有多个双亲结点
    • 网状模型允许两个结点之间有多种联系(复合联系)
    • 网状模型可以更直接地去描述现实世界
    • 层次模型实际上是网状模型的一个特例

    网状模型中子女结点与双亲结点的联系可以不唯一
    要为每个联系命名,并指出与该联系有关双亲记录子女记录
    在这里插入图片描述
    在这里插入图片描述

    多对多联系在网状模型中的表示:
    方法:将多对多联系直接分解成一对多联系

    例如:一个学生可以选修若干门课程,·某一课程可以被多个学生选修,学生与课程之间是多对多联系 ·

    • 引进一个学生选课的联结记录,由3个数据项组成
      学号
      课程号
      成绩
      表示某个学生选修某一门课程及其成绩

    在这里插入图片描述

    ② 网状数据模型的操纵与完整性约束(续)

    网状数据库系统(如DBTG)对数据操纵加 了一些限制,提供了一定的完整性约束

    • :唯一标识记录的数据项的集合
    • 一个联系中双亲记录子女记录之间是一对多联系
    • 支持双亲记录和子女记录之间某些约束条件

    ③ 存储结构

    关键:

    • 实现记录之间的联系

    常用方法:

    • 单向链接
    • 双向链接
    • 环状链接
    • 向首链接

    在这里插入图片描述

    ④ 优缺点

    • 优点
      能够更为直接地描述现实世界,如一个结点可以有多个双亲;
      具有良好的性能,存取效率较高;

    • 缺点
      结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握;
      DDL、DML语言复杂,用户不容易使用;

    6.关系模型

    关系数据库系统采用关系模型作为数据的组织方式
    1970年美国IBM公司San Jose研究室的研究员E.F.Codd首次提出了数据库系统的关系模型
    计算机厂商新推出的数据库管理系统几乎都支持关系模型

    (1)数据结构

    在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由组成。
    几个名词解释:

    • 关系(Relation)
      一个关系对应通常说的一张表

    • 元组(Tuple)
      表中的一行即为一个元组

    • 属性(Attribute)
      表中的一列即为一个属性,给每一个属性起一个名称即属性名

    • 主码(Key)
      表中的某个属性组,它可以唯一确定一个元组

    • (Domain)
      属性的取值范围。

    • 分量
      元组中的一个属性值。

    • 关系模式
      对关系的描述
      关系名(属性1,属性2,…,属性n)
      学生(学号,姓名,年龄,性别,系,年级)
      在这里插入图片描述
      举几个例子:

    • 例1
      学生、系、系与学生之间的·一对多联系:
      学生(学号,姓名,年龄,性别,系号,年级)
      系 (系号,系名,办公地点)

    • 例2
      系、系主任、系与系主任间的一对一联系

    • 例3
      学生、课程、学生与课程之间的多对多联系:
      学生(学号,姓名,年龄,性别,系号,年级)
      课程(课程号,课程名,学分)
      选修(学号课程号,成绩)

    规范化:

    • 关系必须是规范化的,满足一定的规范条件
    • 最基本的规范条件:关系的每一个分量必须是一个不可分的数据项, 不允许表中还有表
    • 图1.27中工资和扣除是可分的数据项 ,不符合关系模型要求
      在这里插入图片描述

    在这里插入图片描述

    (2)关系数据模型的操纵与完整性约束

    • 数据操作是集合操作,操作对象和操作结果都是关系
      查询
      插入
      删除
      更新

    • 数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合存取路径对用户隐蔽,用户只要指出“干什么”,不必详细说明“怎么干”

    • 关系的完整性约束条件
      实体完整性
      参照完整性
      用户定义的完整性

    (3)存储结构

    • 实体及实体间的联系都用来表示
    • 表以文件形式存储
      有的DBMS一个表对应一个操作系统文件;
      有的DBMS自己设计文件结构;

    (4)优缺点

    • 优点
      • 建立在严格的数学概念的基础上;
      • 概念单一:
        实体和各类联系都用关系来表示;
        对数据的检索结果也是关系;
      • 关系模型的存取路径对用户透明;
        具有更高的数据独立性,更好的安全保密性
        简化了程序员的工作和数据库开发建立的工作;
    • 缺点
      • 存取路径对用户透明导致查询效率往往不如非关系数据模型;
      • 为提高性能,必须对用户的查询请求进行优化,增加了开发DBMS的难度;

    7.面向对象数据模型

    • 语义数据模型面向对象程序设计方法结合起来,用面向对象观点来描述现实世界实体(对象)的逻辑组织对象间限制联系等的模型

    • 一系列面向对象核心概念构成了面向对象数据模型( Object Oriented Data Model, 00模型)的基础,主要包括以下一些概念:

      • (1)现实世界中的任何事物都被建模为对象。每个对象具有一个唯一的对象标识
        (OID)。
      • (2)对象是其状态和行为的封装,其中状态是对象属性值的集合,行为是变更对象状
        态的方法集合。
      • (3)具有相同属性和方法的对象的全体构成了类,类中的对象称为类的实例。
      • (4)类的属性的定义域也可以是类,从而构成了类的复合。类具有继承性,一个类可以继承另一个类的属性与方法,被继承类和继承类也称为超类和子类。类与类之间的复合与继承关系形成了一个有向无环图,称为类层次。
      • (5)对象是被封装起来的,它的状态和行为在对象外部不可见,从外部只能通过对象显式定义的消息传递对对象进行操作。
    • 面向对象数据库(OODB)的研究始于20世纪80年代,有许多面向对象数据库产品相继问世,较著名的有Object Store、02、ONTOS等。

    • 与传统数据库一样,面向对象数据库系统对数据的操纵包括数据查询、增加、删除、修改等,也具有并发控制、故障恢复、存储管理等完整的功能。不仅能支持传统数据库应用,也能支持非传统领域的应用,包括CAD/CAM、OA、CIMS、GIS以及图形、图像等多媒体领域、工程领域和数据集成等领域。

    • 尽管如此,由于面向对象数据库操作语言过于复杂,没有得到广大用户,特别是开发人员的认可,加上面向对象数据库企图完全替代关系数据库管理系统的思路,增加了企业系统升级的负担,客户不接受,·面向对象数据库产品终究没有在市场上获得成功。

    8.对象关系模型

    • 对象关系数据库系统(Object Relational DataBase System, ORDBS) 是关系数据库面向对象数据库的结合。
    • 它保持了关系数据库系统的非过程化数据存取方式和数据独立性,继承了关系数据库系统已有的技术,支持原有的数据管理,又能支持00模型和对象管理。各数据库厂商都在原来的产品基础上进行了扩展。
    • 1999 年发布的SQL标准(也称为SQL99),增加了SQL/Object Language Binding, 提供了面向对象的功能标准。SQL99对ORDBS标准的制定滞后于实际系统的实现。所以各个ORDBS产品在支持对象模型方面虽然思想一致,但是所采用的术语、语言语法、扩展的功能都不尽相同。
    展开全文
  • 比如本文我们要讨论的JVM内存结构、Java内存模型和Java对象模型,这就是三个截然不同的概念,但是很多人容易弄混。可以这样说,很多高级开发甚至都搞不不清楚JVM内存结构、Java内存模型和Java对象模型这三者的概念及...
  • 对象模型,动态模型,功能模型

    千次阅读 2017-06-10 11:44:45
    第七周作业——用面向对象方法分析研究书中习题2第3题中描述的机票预订系统,试建立它的对象模型、动态模型和功能模型。   来源:博客园  2016-04-18 对象模型如下: 动态模型如下: 功能模型...
  • DOM模型的概念和结构

    千次阅读 2019-05-07 16:58:44
    文档对象模型可以让程序和脚本来动态访问和更新文档的内容、结构、样式 文档对象模型采用层次化的树形结构,以树节点的方式表示文档中的各种内容 3、document 该对象表示整个html文档,可以用来获取文档本身的信息并...
  • JAVA对象模型

    千次阅读 2018-06-09 22:16:30
    现在我们来好好的看看Java对象模型: 几乎所有的Java对象保存在堆内存中(有例外,自行了解),在内存中Java对象包含三部分:对象头、实例数据和对齐填充。其中对象头是一个很关键的部分,因为对象头中包含锁状态...
  • c++对象模型知识久负盛名,在c++界具有很高的美誉度,这方面知识的学习,更是被诸多颇具开发实力的行业前辈倾力推荐! 本门课程内容将涉及到很多不被常人所知的 c++对象内部工作原理、底层的一些具体实现机制方面的...
  • 业务模型;UML类图
  • 对象结构型模式

    万次阅读 2019-11-27 21:55:46
    对象结构型模式 结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构 适配器模式 在适配器模式中可以定义一个包装类,包装不兼容接口的对象,这个包装类指的就是适配器(Adapter),它所...
  • OMT 对象模型、动态模型和功能模型

    千次阅读 2015-09-09 17:01:01
    对象模型描述系统中对象的静态结构、对象之间的关系、对象的属性、对象的操作。对象模型表示静态的、结构上的、系统的“数据"特征。对象模型为动态模型和功能模型提供了基本的框架,对象模型用包含对象和类的对象图...
  • 面向对象数据模型

    万次阅读 2018-03-28 09:22:25
    所谓面向对象数据模型指属性和操作属性的方法封装在称为对象类的结构中的模型。可以通过将一个对象类嵌套或封装在另一个类里来表示类间的关联,新的对象类可以从更一般化的对象类中导出,如:以下是描述面向对象数据...
  • 在面试官的因势利导下,很多人对jvm的内存模型已经耳熟能详,但是对我们经常new 出来的对象,比如new Object(),你了解它的内存模型吗?本篇文章将带你走进对象内部,真正去了解这个你最熟悉,也最不熟悉的的对象。 ...
  • 面向对象分析与设计——对象模型

    千次阅读 2014-10-22 09:18:58
     对象模型包括:抽象、封装、模块化、层次结构、类型、并发和持久   2.1 对象模型的演进   OO建立在以前技术的最佳思想之上。两大趋势:小规模→大规模;高级程序设计语言;   2.1.1 程序设计语言的换代...
  • Keras中保存和加载权重及模型结构

    千次阅读 2019-05-22 23:04:04
    1. 保存和加载模型结构 (1)保存为JSON字串 json_string = model.to_json() (2)从JSON字串重构模型 from keras.models import model_from_json model = model_from_json(json_string) (3)保存为YAML...
  • 这就是java内存模型结构图了,我们从图中就可以直观的看到java内存模型是与多线程相关的,其中也提到了共享变量。 Java 内存模型简称 JMM,它定义了一个线程对另一个线程是可见的,另外就是共享变量的概念,因为 ...
  • keras打印模型结构

    万次阅读 2018-01-06 21:38:46
    Keras有两种类型的模型,序贯模型(Sequential)和函数式模型(Model),函数式模型应用更为广泛,序贯模型是函数式模型的一种特殊情况。 两类模型有一些方法是相同的: model.summary():打印出模型概况,...
  • 面向对象建模得到的模型包含系统的3个要素:静态结构对象模型)、交互次序(动态模型)和数据变换(功能模型)。  这三个模型解决的问题不同,其重要程度也不同:几乎解决任何一个问题,都需要从客观世界实体及...
  • 因为想在笔记中夹杂这篇文章中部分内容,所以进行了还是比较多的引用,核心的地方还是自己写的 可以一直接调转到深入理解Java的OOP ...名称:Object-Oriented Analysis:面向对象分析方法 OOA是指...
  • java对象结构

    万次阅读 多人点赞 2017-04-19 22:31:57
    先转载一篇文章作为开头,因为讲的非常详细,我就简单加工下放到这里: ...下图是普通对象实例与数组对象实例的数据结构对象头 HotSpot虚拟机的对象头包括两部分信息: markword 第一部分markwo...
  • JVM内存模型结构

    千次阅读 2020-04-26 10:41:18
    1.JVM内存模型结构 2.GC原理,性能调优 3.调优:Thread Dump, 分析内存结构 4.class 二进制字节码结构, class loader 体系 , class加载过程 , 实例创建过程 5.方法执行过程 6.Java...
  • 建立对象模型即使用UML画类图

    万次阅读 多人点赞 2017-06-04 12:37:01
    UML类图画法及其之间的几种关系 最近复习软件工程的考试,大...看见建立对象模型的题目首先想到就是使用UML画类图,有一定的步骤 文章目录如下: 类图画法 类之间的几种关系:泛化(Generalization)、实现(Reali
  • 参考:http://wenku.baidu.com/view/4d39af1959eef8c75fbfb365.html###
  • 上一篇文章《从Tensorflow模型文件中解析并显示网络结构图(pb模型篇)》中介绍了如何从pb模型文件中提取网络结构图并实现可视化,本文介绍如何从CKPT模型文件中提取网络结构图并实现可视化。理论上,既然能从pb模型...
  • 拓端tecdat|R语言:结构方程模型、潜变量分析

    万次阅读 多人点赞 2019-06-13 08:46:15
    对于熟悉线性回归拟合结构方程模型的分析师来说,在R环境中,拟合结构方程模型涉及学习新的建模语法,新的绘图语法以及通常是新的数据输入方法。然而,拟合结构方程模型可以成为分析师工具箱中的强大工具。 设置 ...
  • 前面几篇文章中, 系统的学习了下JVM内存结构、Java内存模型、Java对象模型, 但是发现自己还是对这三者的概念和区别比较模糊, 傻傻分不清楚。所以就有了这篇文章, 本文主要是对这三个技术点再做一个总结和区分, 加深...
  • JVM内存结构 VS Java内存模型 VS Java对象模型
  • 文章目录半结构化数据模型(Semi-structured Data Model)1. 半结构化数据几种数据模型2. 半结构模型特征3. XML和JSON4. 树状数据结构(Tree Data Structure) (写在前面:由于之前学习过数据库相关知识,这里不再...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 693,541
精华内容 277,416
关键字:

对象模型的结构