自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 Mysql中的B+Tree

磁盘相关知识系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的,位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位。InnoDB存储引擎中默认每个页的大小为16KB,可通过参数innodb_page_size将页的大小设置为4K、8K、16K,在MySQL中可通过如下命令查看页的大小:mysql> show variables like 'innodb_page_size';B+树的定义

2021-08-18 16:50:06 181

原创 mysql存储引擎

MyISAMInnodbCSVArchiveMemoryFerderated

2021-08-18 09:51:38 72

原创 CPU或内存占用过高排查思路

1.先使用top命令找出占用cpu/内存最高的进程id2.再用ps -mp pid -o THREAD,tid,time查询进程中哪个线程的cpu占用率高 记住TID3.使用jstack命令打印步骤1对应进程下的线程日志jstack PID>> xxx.log也可以使用jmap命令导出当前进程的 dump日志jmap -dump:format=b,live,file=文件名PID,文件名可以使txt,bin,hprof等导出的hprof文件可以用MAT等...

2021-08-10 14:07:49 1301

原创 JVM垃圾回收对象的引用类型

强引用一般的Object obj = new Object().就属于强引用(如果有GCRoot的强引用)垃圾回收器绝对不会回收它,当内存不足时宁愿抛出OOM错误,使得程序异常停止,也不会回收强引用的对象。软引用垃圾回收器在内存充足的时候不会回收它,而在内存不足时会回收它。软引用非常适合于创建缓存。当系统内存不足的时候,缓存中的内容时可以被释放的。一些有用但是并非必需,用软引用关联的对象,系统将要发生OOM之前,这些对象就会被回收。例如,一个程序用来处理用户提供的图片。如果将所有

2021-08-10 13:22:51 90

原创 jvm的内存溢出与内存泄漏

内存溢出内存溢出的原因:程序在申请内存时,没有足够的内存空间栈溢出方法死循环递归调用(StackOverflowError)、不断建立线程,多个线程同时在跑(OutOfMemoryError)/** * 1M *5000线程同时在跑 =5G 内存小于5G */public class StackOverFlow { public void test(){ test();//死递归 } public static void main(Stri

2021-08-09 18:25:17 135

原创 Java类加载机制与类加载器(双亲委派模型)

类加载机制概述类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、 初始化(Initialization)、使用(Using)和卸载(Unloading)[gc回收]7 个阶段。其中验证、准备、解析 3 个部分统称为连接(Linking)初始化什么情况下会进行初始化初始化阶段,虚拟机规范则是严格规定了有且只有 5 种情况必须立即对类进行“初始化”(

2021-08-06 17:09:39 197

原创 JVM垃圾回收器

判断对象的存活引用计数法给对象添加一个引用计数器,当对象增加一个引用时计数器加1,引用失效时计数器减1.引用计数为0的对象可被回收。(python在用,但主流虚拟机没有使用)优点快、方便、实现简单缺陷对象互相引用时(A.instance=B 同时 B.instance=A),很难判断对象是否该回收可达性分析(Java中使用)来判定对象是否存活的。这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为 引用链(R

2021-08-05 16:20:47 91

原创 JVM垃圾回收算法

复制算法(copying)将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使 用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只要按顺序分配内存即可, 实现简单,运行高效。只是这种算法的代价是将内存缩小为了原来的一半。 注意:内存移动是必须实打实的移动(复制),不能使用指针玩。优点1.简单高效,不会出现内存碎片问题缺点1.内存利用率

2021-08-05 10:51:30 86

原创 synchronized锁的内存语义

1.当线程释放锁时,JMM会把该线程对应的本地内存中共享变量刷新到主内存中。2.当线程获取锁时,JMM会把线程对应内存置为无效。从而使得被监视器保护的临界区代码必须从主内存中读取共享变量。...

2021-08-03 14:59:35 68

原创 volatile的可见性与原子性

可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。原子性:对任意单个volatile变量的读写具有原子性,但类似于volatile++这种复合操作不具有原子性。

2021-08-03 13:41:42 189

原创 volatile的实现原理

通过查看OpenJDK中unsafe.cpp的源码,会发现被volatile关键字修饰的变量会存在一个"lock."的前缀,这个前缀不是一种内存屏障,但是它能完成类似内存屏障的功能,Lock会对CPU总线和高速缓存加锁,可以理解为CPU指令级的一种锁。 同时改指令会将当前处理器缓存行的数据直接写回到系统内存中,且这个写回内存的操作回使在其他CPU里缓存了该地址的数据无效。 在具体的执行上,它先对总线和缓存加锁,然后执行后面的指令,最后释放锁后会把高速公路缓...

2021-08-03 13:16:35 50

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除