Bulingfeng Blog

「背后的努力决定人生的高度」

Jvm调优相关

Jvm调优相关

简介 JVM常见的问题就是GC进行频繁导致吞吐量减少,已经程序发生OOM而导致程序运行异常; 但是如果想了解OOM就必须知道JVM的垃圾回收的原理或者过程是什么样的;下面就来分别讨论下垃圾回收的过程是什么样的和遇到OOM的时候如何进行分析。 垃圾回收的流程 一般的流程都是对象先创建出来然后被放到Eden区域,然后Eden满的时候就会触发Minor GC;当然具体的流程可以看下面图,这...

Mysql相关一些记录和总结

Mysql相关一些记录和总结

关于mvcc相关文章 1、通俗易懂的mvcc讲解 1 https://www.cnblogs.com/jelly12345/p/14889331.html 在mysql中mvcc的应用知识在隔离级别是RC和RR这两个隔离级别的时候才会出现;但是这两个隔离级别产生的readview的时机不是一样的,RC隔离级别的时候,在同一个事务当中,第一个查询的sql语句执行的时候;而RR隔离级别的...

kafka消息丢失问题(对中文世界资料错误的纠正)

kafka消息丢失问题

简介 不得不再次感叹,每次看中文世界的文章,很多时候都是会被恶心到,因为TMD写的东西错误百出,但是就是这样的骗子文章,大多数人也会信,这些人从来没有反思过这些人说的对不对,言归正传来说下kafka消息丢失的问题把。 详细分析 消息的丢失可以从这几方面入手: 生产者端发送消息丢失; 消费端的数据丢失; 服务器的损坏造成的数据丢失; 生产者端 ...

完美主义是阻碍自己持续进步的拦路虎

日常思考

所谓的完美主义者,他们追求的所谓的完美主义,看似是追求极致的表现,实际上更可能只是在以还未准备好之名来逃避现实的接口而已。 接受早期做的不够优秀的自己 要明白一个事实: 自己在任何领域的早期的实践过程中,自己就是笨拙的。 自己能做的就是马上开始做,边做边学。在实践的过程中不断学习和发现自己的不足,发现自己的不足,然后进行纠正,然后重复这个动作,这样自己就会技能或者能力就会得到螺...

线程池详解

线程池详解

简介 双亲委派加载机制的意义是什么呢? 减少相同类的创建,代码功能的完整性和一致性。还有个原因就是有人恶意创建一些类来对程序进行恶意攻击。 而在谈双亲委派之前,还是要谈谈类的加载过程。 类的加载 1、验证阶段;JVM会校验.class文件是否符合JVM规范。 2、准备阶段;给静态变量赋值给默认值。如果是加final的静态变量,则直接赋值完成。比如public static fin...

条件变量和信号量

条件变量和信号量

简介 如果让你设计一个生产者和消费者,当队列里面没有数据的时候,消费者暂停;当队列里面数据满了的时候,生产者暂停。而暂停的这个动作怎么来做呢? 写一个sleep函数;但是这个会让程序的效率低下。 使用自旋的方式;这个方式可能会导致cpu飙升,影响系统的性能。 这里就要使用线程之间的互相通讯来解决,条件变量和信号量。 条件变量 条件变量有两种: 内置...

并发容器

并发容器

简介 任何一个java的容器都可以使用Collections类提供的synchronizedXXX()函数来把对应的容器转换为线程安全的容器,但是这种加锁是简单粗暴的,性能比较低下。 而JUC(java util concurrent)提供的一些并非容器,虽然不能和java的容器一一对应,但是由于使用了分段锁,所以可以高效的执行代码。 写时复制 当多线程写一个容器的时候(多个增,...

原子类介绍

原子类介绍

简介 原子类都是使用CAS的方式来进行实现的,而原子类的分类如图所示;由于浮点数不能精确确定其的准确值,所以没有浮点类的原子类。 ABA问题 当引用类型的数据被修改的时候会出现ABA问题,这样会造成一些问题。所以原子类也给了对应的类来防止这种现象出现,比如AtomicStampedReference。 1 2 3 4 5 6 AtomicStampedReference<S...

ThreadLocal的详细描述

ThreadLocal的详细描述

简介 多线程出现线程安全的重要原因就是共享变量,如果没有共享变量,那么也就不存在线程安全的问题。而ThreadLocal可以从感觉上来让某些变量变成共享,但是又是线程安全的。 这个因为是感觉上是共享,只不过是都是同一个线程执行的时候才能拿到同样的共享数据,虽然没有显式的调用。 这是因为Thread类中有个成员变量ThreadLocal.ThreadLocalMap threadLoca...

常见问题总结

常见问题总结

关于ThreadLocal问题 ThreadLocal在使用结束的时候,要强制调用remove方法来进行把对应线程持有的ThreadLocalMap的引用给释放掉,否则会引起OOM。 tomcat为共享线程池,然后ThreadLocal没有主动调用remove方法导致内存泄露 没有主动调用remove方法,由于tomcat是线程池复用,所以造成同一个线程中的用户信息不一致。比如...