JVM、垃圾回收、mysql存储引擎

目录

目录

1、JVM内存模型

2、垃圾回收机制

3、mysql存储引擎

4、docker

5、事务



1、JVM内存模型

 

虚拟机栈:存放变量等基础数据类型

本地方法栈:Native 方法服务

程序计数器:当前线程所执行的字节码的行号指示器

堆:对象和数组

方法区:static、classes  被JVM 加载的类信息、常量、静态变量、即时编译器编译后的代码等数据


栈、本地方法栈、程序计数器是线程私有,方法结束即消失

堆和方法区是共享等待GC

2、垃圾回收机制

标记清除--碎片化
拷贝 --浪费一半空间
标记压缩--效率低


回收的是堆区,分为Yong区(年轻代)和Old区(老年代)

三种方式:标记整理、拷贝、压缩

实际是 yong区又分为S0\S1\E ,比例默认为1:1:8

新生成的对象存放于E区,当E区满了触发一次回收,未清除的放进S0,S0和S1交替进行,

当一个对象被GC6次还在,会被放进Old区,Old存放大于6次的对象和大的数据。

Old区满了会进行Full GC,伴随着Yong GC,服务会停止,专门进行标记整理内存。

年轻代和年老代比例 1:2

年轻代大了,会导致年老代小,导致每次GC的实际变长

年轻代小了,会导致年老代大,会导致频繁GC,引发FullGC。

调优方式:本着减少fullGC的次数,去观察程序运行高峰年老代 所占内存,预留1/3增加空间,去调整比例。

GC如何判断对象可以被回收:通过可达性分析,从GC Roots开始向下找,这条链被称为引用链,不在这个链上的就认为可以被回收。但不是马上回收,而是标记,等待虚拟机再次去验证是否覆盖Finalizer方法,如果未覆盖,则再次进行可达性分析,不可达即回收。

GC Roots有哪些:虚拟机栈中引用的对象,方法区静态变量、常量引用的对象、native方法引用的对象。
 

3、mysql存储引擎

存储引擎:不同数据文件在磁盘存储的不同形式。
InnoDB支持事务、外键、支持表锁和行锁
叶子节点直接存放数据。每次读取16KB的数据
myisam:存放地址。是原生存储引擎。支持自适应hash
memory:使用hash索引,

hash:hash表不支持范围查询。memory:使用hash索引,myisam自适应hash。
树:
二叉树、红黑树、B+树

B+树是一个多叉树、节点有序、每个节点可以多条记录。
1、mysql索引一般有3-4层就足以支持千万级别表的查询。
2、创建索引的字段越短越好,因为可以存储更多数据量,在长度不变的情况下。
3、能使用代理主键使用代理主键,能自增尽可能自增,不自增会增加索引的维护成本。
4、聚簇索引:数据跟索引是否是聚集存储的,inner db 的主键索引是聚簇索引

key 主键——>唯一键——>6字节的rowid
int占4个字节,

非聚簇索引:myisam;  innodb的二级索引(辅助索引、普通索引)
基数:每列的不重复值,基数/总行数 越接近1越应该加索引。

聚簇索引:真实存在数据的

聚集索引:一般是主键索引,没有主键就是非空唯一索引,再不然就是row_id
二级索引: 聚集索引以外的都是二级索引

索引有什么负面影响?
1、索引越多,占的空间越大
2、更改添加索引数据的时候,维护这个索引树,导致添加修改数据时会慢!除了查询外的性能变慢

4、docker

dockerfile:自动化脚本,用来创建镜像
镜像:包含你所部署的应用程序以及它所关联的所有库
容器:镜像的实体,可以理解为一个进行

5、事务

@Transactional 可以作用在接口、类、类方法,@Transactional注解的方法都是被外部其余类调用才有效,故只能是public

  • 作用于接口:不推荐这种使用方法,因为一旦标注在Interface上并且配置了Spring AOP 使用CGLib动态代理,将会导致@Transactional注解失效
  • Spring默认使用的是jdk自带的基于接口的代理,而没有使用基于类的CGLIB代理。

propagation 代表事务的传播行为,所谓事务传播,就是被调用者的事务与调用者的事务之间的关系。默认值为 Propagation.REQUIRED。

同一个类中,方法A(无事务注解)调用方法B(有),此时事务不生效。方法B不会回滚。

如果方法A和方法B都有事务注解,会合并为一个事务执行。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值