JVM从小白学成大佬 1.开篇 2.Java虚拟机运行时数据区 3.深入解析强引用、软引用、弱引用、幻象引用 4.Java虚拟机何谓垃圾及垃圾回收算法 5.垃圾收集器及内存分配策略 6.创建对象及对象的访问定位 【面试必备】小伙伴栽在了JVM的内存分配策略。。。 弄明白CMS和G1,就靠这一篇了 ZooKeeper 1.ZooKeeper单机版、伪集群和集群环境搭建 2.用Java实现ZooKeeper API的调用 3.ZooKeeper源码环境搭建 Mysql 深入浅出Mysql索引的那些事儿 【黑魔法】Covering Indexes、STRAIGHT_JOIN 性能对比:Count ...
synchronized、Lock、ReentrantLock介绍
来源:http://www.cnblogs.com/dolphin0520/p/3923167.html 一.synchronized的缺陷synchronized是java中的一个关键字,也就是说是java语言内置的特性。那么为什么会出现Lock呢? 如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况: 获取锁的线程执行完了该代码块,然后线程释放对锁的占有; 线程执行发生异常,此时JVM会让线程自动释放锁。 因此就需要有一种机制可以不让等待的线程一直无期限地等待 ...
【黑魔法】Covering Indexes、STRAIGHT_JOIN
今天给大家介绍两个黑魔法,这都是压箱底的法宝。大家在使用时,一定要弄清他们的适用场景及用法,用好了,就是一把开天斧,用不好那就是画蛇添足。自从看过耗子哥(左耳朵耗子)的博客,都会给对相应专题有兴趣的小伙伴列出几篇拓展文章,我觉得这种方式还是非常不错,所以这篇文章我也会列出几篇扩展的文章,供想更深入思考的小伙伴查阅。 可能有人会认为这两个用法会比较冷门,但是在跨系统调用api的过程中,表的数据量比较大时,sql查询性能太差,会导致接口响应超时,就会对相应的业务产生非常大的影响。系统优化,大家千万不要以为只是后端的代码优化而已,sql的优化同样也是重点。 1 Covering Indexes可能有 ...
通过jstack与jmap分析一次线上故障
来源:https://www.cnblogs.com/kingszelda/p/9034191.html 一、发现问题 下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复。 二、排查思路简单分析下可能出问题的地方,分为5个方向: 系统本身代码问题 内部下游系统的问题导致的雪崩效应 上游系统调用量突增 http请求第三方的问题 机器本身的问题 三、开始排查 查看日志,没有发现集中的错误日志,初步排除代码逻辑处理错误。 首先联系了内部下游系统观察了他们的监控,发现一起正常。可以排除下游系统 ...
深入浅出Mysql索引的那些事儿
一.索引的作用一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。 在数据量和访问量不大的情况下,mysql访问是非常快的,是否加索引对访问影响不大。但是当数据量和访问量剧增的时候,就会发现mysql变慢,甚至down掉,这就必须要考虑优化sql了,给数据库建立正确合理的索引,是mysql优化的一个重要手段。 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从上往下找到y字母,再找到剩下的sql。如果没有索引,那 ...
内存泄漏与内存溢出
不管哪种编程语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。java中对象可以采用new或反射或clone或反序列化的方法创建,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控,java会使用有向图的方法来管理内存,实时监控对象是否可以达到,如果不可到达,则就将其回收,这样也可以消除引用循环的问题。 java使用有向图的方式进行内存管理,示例如下:在有向图中,我们叫做obj1是可达的,obj2就是不可达的 ...
性能对比:Count(字段)、Count(主键)、Count(1)、Count(*)
说明:此篇文章的内容绝大部分来源于《极客时间》专栏。 以下讨论是基于InnoDB引擎。 至于分析性能差别的时候,可以记住以下几个原则: server层要什么就给什么 InnoDB只给必要的值 现在的优化器只优化了count(*)的语义为“取行数”,其它“显而易见”的优化并没有做。接下来,我们一个个来进行分析。 对于count(主键id)来说,InnoDB引擎会遍历整张表,把每一行的id值都取出来,返回给server层。server层拿到id后,判断是不可能为空的,就按行累加。 对于count(1)来说,InnoDB引擎遍历整张表,但不取值。server层对于返回的每一行,放一个数字“1 ...
Mysql字符串截取总结:Left()、Right()、Substring()、Substring_index()
在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,mysql有很多字符串函数可以用来处理这些需求,如Mysql字符串截取总结:left()、right()、substring()、substring_index()。 一.从左开始截取字符串用法:left(str, length),即:left(被截取字符串, 截取长度) SELECT LEFT('www.yuanrengu.com',8); 结果为:www.yuan 二.从右开始截取字符串用法:right(str, length),即:right(被截取字符串, 截取长 ...
Mysql中Left Join、Right Join、Inner Join的区别
left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接): 只返回两个表中联结字段相等的行 举例如下: 表A记录如下:aID aNum1 a200501112 a200501123 a200501134 a200501145 a20050115表B记录如下:bID bName1 20060324012 20060324023 20060324034 20060 ...
获取对象属性类型、属性名称、属性值的研究:反射和JEXL解析引擎
先简单介绍下反射的概念:java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以在运行时装配。在实际的业务中,可能会动态根据属性去获取值。 工具类如下: package com.yaoguang.common.utils.field;import java.beans.BeanInfo;import java.beans.Introspector;import java.b ...