首页 » Latest Post

快速搭建一个react项目,按如下步骤:
npm init 

npm install create-react-app --save-dev

npx create-react-app react-demo

外面的package.json可以忽略,用react-demo里面的

jvm学习随手笔记
  1. -Xss
    栈内存大小 设置单个线程栈大小,一般默认512~1024kb

2.一个栈帧对应一个函数,栈帧内包含

  • 局部变量表
  • 操作数栈 ---执行引擎的工作区,类似于操作系统的缓存(执行引擎类似cpu,栈和堆类似内存)
  • 动态链接
  • 完成出口

3.方法区和堆刚启动就已经划好了
4.内存区域:线程私有----虚拟机栈,本地方法栈,程序计数器

       线程共享---堆,方法区(运行时常量池,加载类信息)

5.方法区---虚拟机规范规定的东西(逻辑划分)----JDK1.7对方法区的实现叫永久代,JDK1.8叫元空间,可以用来装载class文件

6.静态常量池/运行时常量池-----javap -v Person.class 静态常量池

Constant pool:
    #1 = Methodref          #55.#123      // java/lang/Object."<init>":()V
    #2 = Fieldref           #54.#124      // geek/me/javaapi/baidu/PcsApi.pcsItemService:Lgeek/me/javaapi/baidu/service/PcsItemService;
    #3 = Methodref          #125.#126     // geek/me/javaapi/baidu/service/PcsItemService.getChildItem:(Ljava/lang/String;)Ljava/util/List;
    #4 = Methodref          #54.#126      // geek/me/javaapi/baidu/PcsApi.getChildItem:(Ljava/lang/String;)Ljava/util/List;
    #5 = InterfaceMethodref #127.#128     // java/util/List.stream:()Ljava/util/stream/Stream;
    #6 = InvokeDynamic      #0:#134       // #0:apply:(Lgeek/me/javaapi/baidu/PcsApi;)Ljava/util/function/Function;
    #7 = InvokeDynamic      #1:#137       // #1:apply:()Ljava/util/function/Function;
    #8 = Methodref          #138.#139     // java/util/stream/Collectors.toMap:(Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/stream/Collector;
    #9 = InterfaceMethodref #140.#141     // java/util/stream/Stream.collect:(Ljava/util/stream/Collector;)Ljava/lang/Object;
   #10 = Class              #142          // java/util/Map
   #11 = Class              #143          // java/util/ArrayList
   #12 = Methodref          #11.#123      // java/util/ArrayList."<init>":()V
   #13 = InterfaceMethodref #127.#144     // java/util/List.iterator:()Ljava/util/Iterator;
   #14 = InterfaceMethodref #145.#146     // java/util/Iterator.hasNext:()Z
   #15 = InterfaceMethodref #145.#147     // java/util/Iterator.next:()Ljava/lang/Object;
   #16 = Class              #148          // geek/me/javaapi/baidu/dto/PcsItem
...

运行时常量池----符号引用---替换为---直接引用。存放符号和内存地址
7.直接内存---堆外内存,NIO,bitbuff,栈中操作时,用引用操作它。 EHCache---中间件,用的较多

8.注意方法区是静,堆区是动态,都是线程共享区域
9.栈是容器,存的是一个个栈桢

10.jvm代码运行jvm内存处理全流程
a.jvm申请内存,向操作系统
b.初始化运行时数据区,方法区和堆
c.类加载到方法区,常量加载到方法区
d.执行方法main,入栈,创建对象
11.堆,新生代(eden,from,to),老年代tenured
12.jshdb查看内存情况,sawindbg.dll

了解流式系统(Stream System)的概念

1. 什么是流式系统?----一个设计用来处理 无限数据(infinite 表示很多,极大) 的处理引擎。

  • 数据的两个重要维度

    • cardinality 基数---可以分为有界数据(Bounded)和无限数据(Unbounded)
    • constitution 物理结构、组成-----可分为Table类型(常规mysql用的就是)和Stream类型(一个元素挨着一个元素element-by-elment)---Map Reduce 系列常用

2. 流处理系统---为了取代lamda那令人诟病的双模型结构,需要两样武器

  • 正确性Correctness

    • 正确性可以让你对待batch一样进行流处理
    • 正确性是一致性存储的基础

Flink 架构由四部分组成:Job Manager 、Resource Manager 、Task Manager 、Dispatcher

architecture

1.作业管理器 Job Manager

Job Manager ---是控制单个应用(application)运行的Master 进程。每个应用只能由不同的JobManager管理

  • 每个应用---由一个所谓的Job Graph(逻辑图) 和一个jar(包含依赖库和资源)组成
  • Job Manger 会转换Job Graph 到一个可以物理执行的图( a physical dataflow graph),也叫ExecutionGraph
  • ExecutionGraph 包含可以并行执行的Task
  • Job Manger 会向Resource manager 请求必要的资源----任务管理槽(TaskManager slots)来执行task
  • 当Job Manger 接收到足够的任务管理槽,它就会发送ExecutionGraph 的task 到Task Manager 执行。
  • 执行期间,Job Manger是一个中央协调器,负责所有的中央协调(center coordination)

2. 资源管理器 Resource Manager

Flink 拥有多种ResourceManager,比如YARN,K8s,MESOS,还有独立部署(StandAlone deployment)

  • 资源管理器,用来管理任务管理器槽(task manager slots)----Flink的处理资源单元(unit)
  • 资源管理器在资源不够的时候,让资源提供者(Resource provider)提供更多的容器来启动TaskManger。也可以关闭闲置的Task Manager占用的资源。

3.任务管理器TASK Manager

任务管理器是FLink的工作进程(work process,相对于job Manager的master process)

  • 每个Task manager提供一定数量的槽,来决定可以运行的task数目
  • Task Manager会注册自己的槽给Resource Manager
  • Job Manger 会根据Task Manager的槽数分配任务给他
  • 相同应用的Task Manager 之间可以交换数据

4.分发器Dispatcher

分发器提供Rest 接口来提交任务,也提供面板(dashboard)来展示运行情况

  • 分发器用来穿过防火墙
  • 分发器不是必须的