架构图汇总
一,java内存模型
由于java1.8对java内存模型进行了改动,我们这里分开来说明,首先来看java1.8之前的java内存模型。
1,java1.8之前的内存模型
关于java内存模型,有一点,要提一下,那就是,线程之间的通信机制。也就是说:线程之间是如何通信的?
答:共享内存和消息传递。
共享内存通信,指的是各线程之间通过共享内存这一块区域,来进行隐式通信。线程之间通过读写共享内存来进行通信。在java中,典型的应用就是通过共享对象来进行通信。这里要搞清楚2个概念,共享内存和本地内存。共享内存是各线程共享的公共区域。本地内存是线程独享的,其他线程不能访问。
消息传递通信,指的是线程之间必须通过明确的发送消息来进行显示通信。这种通信方式,线程之间没有共享对象,而是通过wait()、notify()等方法,显式的告诉其他线程来进行通信。
2,java1.8的内存模型
java1. 8移出了内存模型中的方法区,引入了元空间的概念。元空间使用的是操作系统的内存,而不是jvm内存。指定元空间的大小,通过下面这个jvm参数:
-XX:MetaspaceSize
还有一个关键点,就是常量池。在java1.7之前,常量池位于方法区。从java1.7开始,常量池位于堆中。
二,java对象的结构
java对象的结构
对象头的结构
Mark Word
三,双亲委派模型
什么是双亲委派模型?
为什么叫双亲委派模型?
双亲指的是谁?
四,类的生命周期
java类的生命周期:加载-连接-初始化-使用-卸载。
如下图:
五,Eureka架构图
这个架构图是结合源码画出的,个人觉得还是很不错的。
六,Kafka架构图
注意:只有broker和consumer需要向Zookeeper集群注册。生产者无需注册到Zookeeper。
七,Spring Cloud微服务架构图
架构模型图怎么画java
软件架构是一种无法以简单的一维方式进行说明的复杂实体。
-Paul Clements 《软件架构编档》
正如上面提到的,不同的受众,比如用户、客户、开发人员、测试人员、运维人员,需要从各自工作的角度去理解和使用架构。所以回答这个问题,需要首先了解这幅架构图画出来是给谁看,你想从那个维度去入手。
确定了这个问题之后,再来了解架构视图有哪些维度和组成要素:
1. 架构视图
最经典的当属4+1视图:
逻辑视图
开发视图
过程视图
物理视图
场景视图
4+1视图提出后,业界也有其它的观点提出,诸如SEI(模块视图、组建和连接件视图、分配视图)、西门子4种视图(概念、模块、代码、执行视图)、以及RM-ODP(企业视图、信息视图、计算视图、工程师图)等。
常见的视图除了上述4+1视图外还包括:数据视图、安全视图、实现视图等。
2. 了解架构视图的四要素
图示化主要元素和元素之间的关系
具有明确的图例、定义和说明元素
每个元素具备明确的接口和行为规范
设计原理和设计决策的信息
3. 简单说一下几个视图针对的角色和维度:
逻辑视图一般针对客户、用户、业务人员、开发组织,主要从系统的功能元素、以及它们的接口、职责、交互维度入手。主要元素包括系统、子系统、功能模块、子功能模块、接口等。
开发视图一般针对开发和测试相关人员,主要描述系统如何开发实现;主要元素包括描述系统的分层、分区、框架、系统通用服务、业务通用服务、类和接口、系统平台和大基础框架。用途是知道开发设计和实现。
物理视图一般针对系统运维人员、集成人员,它是系统逻辑组件到物理节点的映射,节点与节点间的物理网络配置等,主要关注非功能性需求,诸如性能(吞吐量)、可伸缩性、可靠性,可用性等,从而得出相关的物理部署结构图。
4. 写在最后
了解这些,确定了你的受众和切入的维度后,你就可以决定你要用什么样的视图和视图组合来表达你的内容,挑选一个你得心应手的工具去实施就可以了。
在我看来,用白板和团队一起画出来是一件极美的好玩的事情。
Java结构
switch好像不行,.case后面要的是常量,
参考代码:
import java.io.*;
public class Demo{
public static void main(String []args){
try{
int score;
String inpt;
System.out.println(" please input the score:");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
inpt=br.readLine();
score=Integer.parseInt(inpt);
if(100==score)
System.out.println("father's promise:buy car.");
else{
if(90=score)
System.out.println("mother's promise:buy computer.");
else{
if(60=score)
System.out.println("mother's promise:buy phone.");
else
System.out.println("no gift.");
}
}
}
catch(Exception e){
System.out.println("invalid input!");
}
}
}
如何用java搭建手机设计平台?
. J2ME总体架构
J2ME是一种通过许多部件和规范的技术, 这众多的部件和规范帮助J2ME来满足这众多的消费产品的不同的需要。和所有的Java程序语言技术一样,在它的核心属于一种虚拟机。就像使用所有 Java技术一样,J2ME的核心也在一种虚拟机中。最初,用于J2ME应用程序虚拟机的被称作 Kilobyte virtual machine或简称 KVM。就像它名称的含义,KVM比较小,通常只有 128K或更少。这比起我们通常了解和使用的J2SE(Java 2标准版)Java虚拟机 ( JVM )的 32 MB来说就小得多了。
用于连接虚拟机的是一系列配置和简表,它们提供了用于特定J2ME环境的类应用程序接口,图一展示了J2ME的总体架构。 每个配置和简表处理一般或具体的消费产品,配置和简表规范是由多种多样的设备生产商和用户共同开发并建立的。配置是用于一组通用设备的最小的Java平台,常常归为一种横向的设备分组,相对来说,横向分组设备是那些共享相同的内存安排,通信带宽,能量需求以及用户能力的设备,一般认为配置能够提供这众多的设备的所有需求。
图一:J2ME平台总体架构图
2. 配置(Configuration)
配置(Configuation)将基本运行时环境定义为一组核心类和一个运行在特定类型设备上的特定虚拟机。虽然还可能在将来定义其他的配置,但当前 J2ME 存在两种配置:
(1)、CLCD(Connected limited device configuration有限连接设置配置)
CLCD是为具有较小存储容量的设备而设计的。根据规范中所说,运行 CLDC的设备应该有 512K或更少的内存空间、一个有限的电源供给 (通常是使用电池)、有限的或断断续续的网络连接性(9600 bps或更少)以及多样化的用户界面甚至没有用户界面。 通常说来,这个配置是为个人化的、移动的、有限连接信息设备而设计,比如手机、呼叫器、PDA和POS终端等。由于我们准备研究的对象是手机,它也是一种典型的CLCD设备,所以有必要对CLCD层进行简要介绍。
CLCD为简表层提供接口服务,同时还可以直接为应用程序层提供服务。CLCD通过四个包为简表层和应用程序提供服务,它包括语言服务、输入输出服务、网络通讯服务和实用工具服务等。这些服务分别在以下四个包中实现:
● java.lang语言包:此包是J2SE中的同名包的子集,继承了J2SE语言包的大部分功能。但是,由于有限于设备的运行资源,CLCD不支持浮点型数据类型,也不提供文件的支持和错误处理的支持。
● java.io输入输出包:此包是J2SE中的同名包的子集,向上层提供基本的IO服务。
● java.util实用工具包:此包是J2SE中的同名包的子集,它提供定时器、日期等常用的实用工具类,但是它没有提供Java集合工具类。
● java.microedition网络通讯包:此包是CLCD中唯一不是J2SE子集的包。它是专门为小型有限资源设备设计的,为其提供类似J2SE的网络输入输出功能。在介绍Java手机网络通讯一节我们将重点说明此包提供的类的使用。
从上面对CLCD提供的四个包的说明可以看出,其实CLCD是J2SE的一个子集,其大部分功能都是从J2SE中减化来的,同时,它还根据运行设备的特性提供了附加的功能。图二展示了CLCD与J2SE关系图.图二:CLCD与J2SE关系图
(2)、CDC(Connected Device Configuration连接设备配置)
CDC是为具有较好的存储容量的设备而设计。一般CDC设备的内存都应大于512k,许多CDC设备配置了2M左右的内存。现在,这一类设备通常是共享的、固定的 (不用移动)网络连接信息设备,像电视机机顶盒,网络电视系统、互联网电话与汽车导航/娱乐系统等等。
3. 简表(Profile)
简表定义了应用程序所支持的设备类型。特别地,它向J2ME配置添加了特定于域的类来定义设备的某种作用。简表建立在配置的上层。至今,已经为 J2ME 定义了两种简表:KJava 和移动信息设备简表(MIDP),它们也被建立在CDLC上。这两种简表适用于小型设备。在手机J2ME中基本上都提供了MIDP简表,手机程序的设计基本上都是基于MIDP的,所以也常把J2ME手机程序设计称为MIDP程序设计。
MIDP,全称Mobile Information Device Profile,可译为移动信息设备简表,是第一个实现的简表。它补充CLDC并且提供应用程序语义和控件、用户界面、持久存储器、网络和用于移动电话的计时器、双通道呼叫器和其他无线电设备。在以后的章节里,我们将重点介绍使用MIDP提供的类库创建手机程序。
4. 虚拟机
在J2ME架构图的最底是虚拟机层,它同J2SE中的JVM性质相同。根据设备使用的配置的不同,使用的虚拟机也有差异。如配置层为CLDC,则虚拟机为KVM,如配置为CDC则虚拟机为CVM。应用程序永远不会直接调用虚拟机服务的,所以对于一般的应用程序开发者可以不用对虚拟机有更深入的了解。
5. 应用程序(Application)
在J2ME架构图最顶层是应用程序层,它是可以在J2ME平台上为实现某个事务而运行的程式。在许多手机中都预安装了一些应用程序,如游戏、计算器、记事簿、移动QQ等等。本系列教程介绍的重点也是在这一层,在以后的章节里,我们将学习到如何在手机J2ME平台上创建各种各样的手机应用程序。