自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

保暖透气大裤衩LeoLee的博客

一个最底层java开发的博客

  • 博客(13)
  • 收藏
  • 关注

原创 Mysql——查询优化(小表驱动大表、order by)

索引相关基础基础知识:Mysql——SQL性能优化基础知识小表驱动大表SELECT * FROM staff s WHERE s.department_id IN (SELCET id FROM department WHERE ...);以Mysql优化器对这条查询语句的理解,应该是先检索子句,在检索主句,即先查询符合条件的部门,再查询员工表数据与子句的结果集进行比较,大致过程如下:for ([department表数据]检索复合条件的部门集A) { for ([staff表数

2021-01-27 20:08:42 582

原创 Mysql——避免索引失效

索引相关基础基础知识:Mysql——SQL性能优化基础知识测试表创建:CREATE TABLE IF NOT EXISTS staff ( id INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '自增主键', name VARCHAR(24) NOT NULL DEFAULT '' COMMENT '姓名', age INT(4) NOT NULL DEFAULT 0 COMMENT '年龄', position VARCHAR(32

2021-01-24 22:25:59 294

原创 Mysql——SQL性能优化基础知识

数据库查询慢基本与以下几点相关查询语句写的烂 索引失效 关联查询太多 服务器调优差,Mysql参数配置不理想作为后端开发,其实最关注的是前三点,第三点有些特殊,可能工作中很多情况是不得已才会写出一个很多表关联的SQL,比如表结构设计已经定性,由于业务的发展,导致之前看似合理的表结构在当下业务中显得不再合理,亦或者是某些“令人头疼”的不合理业务要求造成的。优化基础SQL的执行顺序SQL的执行顺序其实很多稍微研究过的朋友已经知道了,我们“手写”的SQL和数据库理解的SQL顺序其实是不一样

2021-01-24 13:09:31 258

原创 JVM——常用GC日志参数及分析

常用垃圾回收相关的参数列表:-XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 在打印PrintGC的时候同时输出GC的时间戳(基准时间形式,上次GC到本次GC的间隔时间) -XX:+PrintGCDateStamps 在打印PrintGC的时候同时输出GC的时间戳(年月日) -XX:+PrintHeapAtGC 在进行GC操作的前后打印出堆信息 -Xloggc

2021-01-19 15:04:30 182 1

原创 JVM——主流垃圾回收器全面总结

垃圾回收器概述垃圾收集器没有在JVM规范中进行过多的规定,可以由各个厂商的不同版本来实现。由于JDK版本处于高速迭代中,因此Java发展至今已经衍生了众多的GC版本。按照线程数可以分为串行垃圾回收器(一条垃圾回收线程)和并行垃圾回收器(多条垃圾回收线程):在诸如单核CPU处理或者较小的应用内存等硬件平台配置较低的场合,串行回收器的性能表现可以超过并行回收器和并发回收器。所以串行回收器默认被应用在客户端的Client模式下的JVM中。 在并发能力比较强的CPU上,并行回收器产生的STW时间要远远

2021-01-18 23:57:18 482 1

原创 JVM——垃圾回收相关基础概念(gc、四种对象引用)总结

System.gc()默认情况下,通过调用System.gc()和Runtime.getRuntime().gc(),会显式的触发Full GC,同时对新生代和老年代进行垃圾回收,尝试释放死亡的对象占用的内存,以及方法区的回收(方法区垃圾回收条件比较严格而已)。 System.gc()并不能保证对垃圾收集器的调用。即这个垃圾回收行为不一定能马上执行,仅仅是告诉JVM希望进行一次垃圾回收操作,具体实施与否不一定。一般情况下不回去手动调用该方法进行垃圾回收,垃圾回收是JVM自动进行的。public c

2021-01-14 13:49:41 470

原创 Java多线程——不可变类的设计

不可变定义某些对象是不可以改变的,在没有线程修改其中变量,即使对象是共享的,其也是线程安全的。可变类举例package com.leolee.multithreadProgramming.juc.immutable;import lombok.extern.slf4j.Slf4j;import java.text.ParseException;import java.text.SimpleDateFormat;/** * @ClassName Test * @Descript

2021-01-13 13:44:41 370 1

原创 Java多线程——Unsafe的CAS操作

Unsafe是一个sun包下的特殊类,包装了很多不便于开发者直接使用的功能方法。本片简单的说明一下Unsafe类中与CAS相关的操作,AtomicXXX等CAS无锁线程安全的工具类底层很多都用到了Unsafe的方法,所以理解和使用Unsafe类CAS相关的方法对AtomicXXX等工具类是非常重要的。Unsafe对象的获取由于Unsafe类无法直接创建(私有的构造方法),采用了单例模式,并且该单例模式的getInstance方法会校验调用该方法的类是否是系统类加载器,看来为了防止开发者直接使用Uns

2021-01-12 18:35:23 333

原创 JVM——垃圾回收算法保姆式详解

什么垃圾?垃圾就是指在程序运行过程中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。在程序的执行过程中,栈帧中的局部变量表中的引用指向具体的对象,当栈帧随着方法的执行结束弹出栈之后,这些对象就处于没有任何指针指向的状态(原文是不可达的对象),此时就变成了需要被回收的垃圾。如果不及时堆内存中的垃圾进行清理,那么这下垃圾对象所占用的内存空间会一直保存到程序的执行结束,被保留的空间无法再次被分配,可能导致内存溢出。为什么要进行GC?好像是个憨憨问题一样QaQ对于一门高级语言来说,当然

2021-01-12 15:23:05 240

原创 Java 字符串操作的底层原理解析

开门见山常量与常量的拼接结果在常量池,原理就是编译器优化 常量池中不会存在相同内容的常量 只要拼接的元素中,有一个是变量,结果就是在堆中,变量拼接的原理是StringBuilder 如果拼接的结果调用了intern()方法,则主动将常量池中还没有的字符串对象放入池中,并返回此对象地址常量拼接String s1 = "a" + "b" + "c";String s2 = "abc";//abc一定是放在字符串常量池中的,此地址赋给s2System.out.println(s1 == s

2021-01-07 22:23:47 524

原创 JVM——执行引擎详解,接地气总结

JVM主要负责的任务就是装载字节码,但是字节码不能直接在操作系统之上运行,字节码并非是本地指令,它包含的指令仅可以被JVM所解析。所以执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令后再做执行,充当了高级语言到机器指令的翻译角色。Hotspot VM包括解释器和JIT即时编译器(两者共用,互相弥补)。解释器:当JVM启动时会根据定义的规范对字节码采用逐行解释的方式执行,将每条字节码文件中的内容翻译为对应平台的本地机器指令 JIT(Just In Time Compiler)即..

2021-01-07 01:14:04 258

原创 对象的实例化、内存布局以及访问定位

对象的实例化创建对象的方式new 包括单例、xxxBuilder、xxxFactory等变形方式 反射 Class对象的newInstance()方法,JDK9开始标识为废弃(只能使用无参构造方法,访问权限为public) Constructor的newInstance()方法(可以使用带参构造方法,访问权限没有限制) clone:不使用构造方法,需要类实现Cloneable接口的clone()方法 反序列化:从文件或者网络中获取一个对象的二进制流创建对象的步骤判断对象对

2021-01-05 01:34:56 213

原创 JVM——方法区(永久代、元空间)

概述方法区是一块独立于堆的内存空间,逻辑上属于堆的一部分。于堆空间一样,是各个线程共享的一个区域 启动时由JVM创建,实际内存空间与堆一样,可以是不连续的物理内存空间 方法区主要就是用来储存类信息,方法区的大小决定了可以保存多少个类。过多的类定义将会导致OOM(JDK之前是OOM:PermGen space,JDK之后是OOM:Metaspace,JDK7之前叫永久代,JDK8开始叫元空间) JDK8之前的永久代使用的是运行时数据区的内存,所以容易OOM,JDK8开始使用本地内存,称之为元

2021-01-04 11:36:52 492

空空如也

空空如也

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

TA关注的人

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