JVM
cap423654
这个作者很懒,什么都没留下…
展开
-
arthas
thread -n 3 -i 10000 可以统计 10 秒内最忙的 3 个线程,并且打印它们的堆栈,很容易发现问题。原创 2021-07-16 09:58:57 · 106 阅读 · 0 评论 -
事务嵌套问题Transaction rolled back because it has been marked as rollback-only
在事务方法中调用其他事务方法时,因为spring事务传播属性,会将事务合二为一。当子方法报错抛异常时,spring将该事务标记为 rollback only。父方法再执行事务就会报Transaction rolled back because it has been marked as rollback-only异常。代码:// 父方法 @Transactional(rollbackFor = Exception.class) public void test() {原创 2020-10-19 11:11:53 · 556 阅读 · 0 评论 -
JVM提问----个人笔记,不喜勿喷
什么时候会尝试触发Minor GC新生代内存区域基本快满了,再次分配对象的时候,发现空间不足触发Minor GC之前会检查老年代大小?检查老年代可用内存空间,是否大于新生代所有对象的总大小,如果大于新生代所有对象,就可以发起Minor GC 老年代可用空间小于新生代的所有对象大小,检查'-XX:HandlePromotionFailure'的参数是否设置,如果设置了,就检查老年代的内存大...原创 2020-04-26 15:39:04 · 173 阅读 · 0 评论 -
垃圾回收个人看
JVM内存区域:1、虚拟机栈: 方法执行时的内存模型,是线程私有的,生命周期跟线程相同。方法执行时入栈,方法执行完出栈,出栈相当于清空数据,所以这块不需要GC。2、本地方法栈: 与虚拟机栈功能非常类似,区别在于虚拟机栈为虚拟机执行java方法时服务,而本地方法栈为虚拟机执行本地方法时服务,也不需要GC.3、程序计数器: 线程独有,可以看作是当前线程执行的字...原创 2020-02-12 13:49:27 · 158 阅读 · 1 评论 -
Redis分布式锁注意点
死锁 为了防止死锁,必须设置过期时间例如:线程A拿到锁,还没有解锁,程序突然挂掉,锁一直存在,其他线程一直拿不到锁。所以要设置过期时间 加锁跟解锁必须是同一个线程,保证原子性 例如:线程A拿到锁,业务还没有处理完成,锁已经超时被自动删除掉了;线程B拿到锁,线程A解锁的时候必须判断值是当前线程,否则删掉线程B的锁。可重入锁和锁的原子性,可以用到ThreadLoca...原创 2019-09-21 11:53:00 · 276 阅读 · 0 评论 -
Redis缓存设计原则
缓存热数据 缓存读写顺序:读,先缓存,后数据库;写,先数据库,后缓存 所有缓存数据都应该设置过期时间 缓存的过期时间应该避免集中过期,造成缓存击穿 缓存key具备可读性,应避免不同业务出现同名的key,简单缩写可节省内存空间 避免缓存穿透,数据库中查不到的数据,可在Redis中设置空值,以避免缓存无数据而每次达到数据库 缓存预热,上线之前可预先将数据写入缓存中 数据一致性问题,...原创 2019-09-05 22:29:58 · 517 阅读 · 0 评论 -
Spring嵌套事务失效的问题
直接上代码 @Transactional public void methodA() { try { methodB(); } catch (Exception e) { e.printStackTrace(); } CatalogEntity record = new CatalogEntity(); catalogEntityMapper.insert(...原创 2018-09-28 15:21:04 · 2239 阅读 · 0 评论 -
高并发限流
限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页或告知资源没有了)、排队或等待(比如秒杀、评论、下单)、降级(返回兜底数据或默认数据,如商品详情页库存默认有货)。 常见的限流算法有:令牌桶、漏桶。计数器也可以进行粗暴限流实现。 一、使用Redis实现 存储两个key,一个用于计时,一...翻译 2018-09-02 14:54:25 · 239 阅读 · 0 评论 -
Spring中BeanFactory跟FactoryBean的区别和联系
BeanFactory BeanFactory是接口,用于管理Bean的一个工厂。BeanFactory是IOC容器的核心接口,它主要作用就是实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。 BeanFactory只是一个接口,并不是IOC容器的具体实现,Springp容器提供了很多种实现,如:XmlBeanFactory、ApplicationContext等。现在...翻译 2018-08-12 00:01:21 · 4145 阅读 · 0 评论 -
Java-Interview
https://github.com/crossoverJie/Java-Interview本项目多数是一些Java基础知识,底层原理,算法详解。翻译 2018-08-09 10:55:24 · 304 阅读 · 0 评论 -
ReentrantReadWriteLock读写锁
ReentranReadWriteLock读写锁,内部维护了二个锁,一个用于读操作支持多线程并发执行,一个用于写操作只能单线程执行。在多线程的场景下,如果对资源加了写锁,其它线程无法再获取写锁和读锁;如果对资源加了读锁,其它线程可以继续加读锁,也就是说可以多线程同时读的操作。在实际应用中,读多写少的情况下,能够提供更好的并发性和吞吐量。功能:支持公平和非公平获取锁的方式 可...翻译 2018-07-23 11:34:14 · 135 阅读 · 0 评论 -
Synchronized与Lock
锁类型:可重入锁:在对象中所有同步方法不用再次获得锁 可中断锁:在等待获取锁的过程中可以中断当前线程 公平锁:等待获取锁的时间长的优先获取锁,队列效果 读写锁:读的时候可以多线程一起读,写的时候必须同步//可重入锁:在调用methodE,执行methodD时不需要再次获得锁 public void methodD(String str) throws Exception {...翻译 2018-07-23 11:12:05 · 253 阅读 · 0 评论 -
Java内存泄露和溢出
基本概念内存泄露:程序中动态分配内存给临时对象,但是对象不会被GC所回收,它始终占用内存。从而引发内存溢出内存溢出:程序运行过程中无法申请到足够的内存而导致的一种错误。内存泄露是导致内存溢出的一种诱因,但不是唯一的因素。Java堆溢出(OutOfMemoryError:Java heap space)堆是用来存储对象实例的,因此如果我们不断地创建对象,并且使创建的对翻译 2017-10-12 22:05:56 · 205 阅读 · 0 评论 -
JVM堆与栈
数据类型java虚拟机中,数据类型可以分为二大类:基本数型和引用类型。基本类型的变量保存原始值,即:代表的值就是数据值本身;而引用类型的变量保存引用值。‘引用值’代表了某个对象的引用,而不是对象的本身,对象的本身存放在这个引用值所表示的地址的位置。基本类型:byte,short,int,long,char,float,double,boolean引用类型:对象,数组翻译 2017-10-11 21:37:14 · 153 阅读 · 0 评论