自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多线程与高并发--《Volatile、Cas、ReentrantLock、AQS下的部分类联合讲解》

一、volatile作用保证线程可见性:堆内存是所有线程共享里面的内存,除此之外,每个线程都有自己的专属区域,如果共享内存里有一个值,当我们线程要去访问这个值,会将这个值copy一份当自己的工作空间,对这个值进行改变。改完之后马上写回去,但什么时候去检查有没有新的值无法控制。加了volatile就可以保证线程里面发生的改变在线程之间是可见的。底层是采用了MESI缓存一致性协议。禁止指令重排序:cpu为了提升效率,执行一条指令会并发的执行,每次写都会被线程度读到,加了volatile,cpu就会按着顺序

2020-12-01 17:17:09 140

原创 多线程与高并发--《线程基本概念》

一、基本概念进程:硬盘有一个程序叫QQ.exe,这是一个程序,这个程序是一个静态概念,双击启动,登录进去,这叫一个进程。进程相对于程序来说是一个动态的概念。线程:作为一个进程里面最小的执行单元他就叫线程,一个程序里不同的执行路径就叫一个线程。二、创建线程几种方式new Thread().start();new Thread(Runnable).start();Executors.newCachedThreadPool();(或者FutureTask+Callable)三、线程的几种状态

2020-11-19 22:12:43 110

原创 学习记录--《日志分析与JVM参数总结》

一、日志分析CMSjava -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC com.xx.xx.TestXms:堆大小PrintGCDetails :打印GC的详细信息UseConcMarkSweepGC :启动CMS[GC (Allocation Failure) [ParNew: 6144K->640K(6144K), 0.0265885 secs] 6585K->2770K(19840K), 0.0

2020-11-18 21:13:18 118

原创 学习记录--《垃圾回收算法》

一、CMS大方面有4阶段ps: 这里需要解释一下,本来有6个阶段,其中有两个准备阶段第一个阶段:initial mark初始标记第二个阶段:concurrent mark并发标记第三个阶段:remark重新标记第四个阶段:concurrent sweep并发的回收这里有两个并发阶段,只要在JVM看到concurrent这个,就说明是我的垃圾回收线程和我的工作线程在一块工作。第一个阶段:通过GCRoots找到跟对象(此过程STW,但是时间很短)第二阶段:并发标记会发生很多次,而且在并发的

2020-11-18 20:50:48 103

原创 学习记录--《JVM调优第三章》

一、定位观察JVM问题执行java -Xms200M -Xmx200M -XX:+PrintGC com.zyh.jvm.gc.T15_FullGC_Problem01top命令观察到问题:内存不断增长 CPU占用率居高不下top -Hp 观察进程中的线程,哪个线程CPU和内存占比高jps定位具体java进程jstack 定位线程状况,重点关注:WAITING BLOCKEDjstat -gc 动态观察gc情况 / 阅读GC日志发现频繁GC / arthas观察 / jconsole/jvis

2020-11-18 14:31:02 157

原创 学习记录--《JVM调优第二章》

一、写在开头补充几个知识点Perm Generation和Metaspace区别1.前者:命令指定大小,但是不可再修改,可能会溢出,字符串常量在1.7放在永久代。2.后者:不设置,受限于物理内存,字符串常量在1.8放在堆二、系统CPU经常100%,如何调优CPU100%那么一定有线程在占用系统资源找出哪个进程cpu高(top)该进程中的哪个线程cpu高(top -Hp)导出该线程的堆栈 (jstack)查找哪个方法(栈帧)消耗时间 (jstack)工作线程占比高 | 垃圾回收线程占

2020-11-16 10:08:54 96

原创 学习记录--《JVM调优第一章》

一、常见垃圾回收器组合参数设定:(1.8)-XX:+UseSerialGC = Serial New (DefNew) + Serial Old小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器-XX:+UseParNewGC = ParNew + SerialOld这个组合已经很少用(在某些版本中已经废弃)-XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old-XX:+UseParall

2020-11-11 20:48:59 220

原创 学习记录--《GC和GC Tuning》

一、垃圾概念没有引用执行的任何对象都叫做垃圾。二、java和C++对垃圾处理的区别java:只管扔垃圾就行,自动处理GC处理垃圾开发效率高,执行效率低C++:手动处理,但会产生问题忘记回收,内存泄漏回收多次非法访问开发效率低,执行效率高三、如何定位垃圾引用计数(Reference Count)后面会说RC有一个引用指向一个对象,头部有个数字,有几个指向他就写几,当变为0,就是垃圾。无法解决的问题:循环引用A->B->C,形成一种闭环,大家都是1,对于RC来说

2020-11-11 15:35:38 681

原创 java运行时数据区和常用指令

写在文章开头一道面试题(下面去分析)public static void main(String[] args){ int i = 1; i = i++; //i = ++i; System.out.println(i);}i的输出结果分别是多少????一、java运行时的数据区(不要与JMM内存模型搞混)PC 程序计数器存放指令位置虚拟机的运行,类似于这样的循环:while( not end ) {​ 取PC中的位置,找到对应位置的指令; 执行该指令; ​ PC ++

2020-11-10 14:35:28 157

原创 学习记录--关于对象创建相关问题

一、请解释一下对象的创建过程1.loading(例:new A();把A的class去load到内存)2.class linking1.varification(校验)2.preparation(类的静态变量设默认值)3.resolution(解析)3.class initializing(类的静态变量设初始值,同时执行静态语句块)4.申请对象内存5.成员变量赋默认值6.调用构造方法1.成员变量顺序赋默认值2.执行构造方法语句二、对象在内存中的布局观察虚拟机配置的命令:java

2020-11-09 21:18:37 116

原创 学习记录-- MESI+Cache Line+CPU乱序+Volatile及Synchronize实现细节

1.MESI概念MESI(Modified Exclusive Shared Or Invalid)(也称为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一种广泛使用的支持写回策略的缓存一致性协议。MESI协议中的状态:CPU中每个缓存行(caceh line)使用4种状态进行标记(使用额外的两位(bit)表示):M: 被修改(Modified)该缓存行只被缓存在该CPU的缓存中,并且是被修改过的(dirty),即与主存中的数据不一致,该缓存行中的内存需要在未来的某个时间点(允许其它

2020-11-09 15:21:49 305

原创 **学习记录--JVM从入门到精通**

学习记录–JVM从入门到精通1

2020-11-07 22:31:34 130

空空如也

空空如也

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

TA关注的人

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