![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习
YhZhou1996
一只正在努力地菜鸟程序员!!!
展开
-
学习记录--《日志分析与JVM参数总结》
一、日志分析 CMS java -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC com.xx.xx.Test Xms:堆大小 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 · 114 阅读 · 0 评论 -
学习记录--《垃圾回收算法》
一、CMS大方面有4阶段 ps: 这里需要解释一下,本来有6个阶段,其中有两个准备阶段 第一个阶段:initial mark初始标记 第二个阶段:concurrent mark并发标记 第三个阶段:remark重新标记 第四个阶段:concurrent sweep并发的回收 这里有两个并发阶段,只要在JVM看到concurrent这个,就说明是我的垃圾回收线程和我的工作线程在一块工作。 第一个阶段:通过GCRoots找到跟对象(此过程STW,但是时间很短) 第二阶段:并发标记会发生很多次,而且在并发的原创 2020-11-18 20:50:48 · 98 阅读 · 0 评论 -
学习记录--《JVM调优第三章》
一、定位观察JVM问题 执行java -Xms200M -Xmx200M -XX:+PrintGC com.zyh.jvm.gc.T15_FullGC_Problem01 top命令观察到问题:内存不断增长 CPU占用率居高不下 top -Hp 观察进程中的线程,哪个线程CPU和内存占比高 jps定位具体java进程 jstack 定位线程状况,重点关注:WAITING BLOCKED jstat -gc 动态观察gc情况 / 阅读GC日志发现频繁GC / arthas观察 / jconsole/jvis原创 2020-11-18 14:31:02 · 151 阅读 · 0 评论 -
学习记录--《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 · 92 阅读 · 0 评论 -
学习记录--《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 · 214 阅读 · 0 评论 -
学习记录--《GC和GC Tuning》
一、垃圾概念 没有引用执行的任何对象都叫做垃圾。 二、java和C++对垃圾处理的区别 java:只管扔垃圾就行,自动处理 GC处理垃圾 开发效率高,执行效率低 C++:手动处理,但会产生问题 忘记回收,内存泄漏 回收多次 非法访问 开发效率低,执行效率高 三、如何定位垃圾 引用计数(Reference Count)后面会说RC 有一个引用指向一个对象,头部有个数字,有几个指向他就写几,当变为0,就是垃圾。 无法解决的问题:循环引用A->B->C,形成一种闭环,大家都是1,对于RC来说原创 2020-11-11 15:35:38 · 677 阅读 · 0 评论 -
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 · 155 阅读 · 0 评论 -
学习记录--关于对象创建相关问题
一、请解释一下对象的创建过程 1.loading(例:new A();把A的class去load到内存) 2.class linking 1.varification(校验) 2.preparation(类的静态变量设默认值) 3.resolution(解析) 3.class initializing(类的静态变量设初始值,同时执行静态语句块) 4.申请对象内存 5.成员变量赋默认值 6.调用构造方法 1.成员变量顺序赋默认值 2.执行构造方法语句 二、对象在内存中的布局 观察虚拟机配置的命令: java原创 2020-11-09 21:18:37 · 114 阅读 · 0 评论 -
学习记录-- 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 · 301 阅读 · 0 评论 -
**学习记录--JVM从入门到精通**
学习记录–JVM从入门到精通 1原创 2020-11-07 22:31:34 · 123 阅读 · 0 评论