01 2021 档案
摘要:区别: 1.InnoDB支持事务,MyISAM不支持事务,InnoDB会为每条语句默认封装成事务支持,当多条语句执行时,可以放到 begin和commit中,进行执行; 2.InnoDB支持外键,MyISAM不支持外键; 3.InnoDB是聚焦索引,而MyISAM是非聚焦索引,但是它们都是B+ tr
阅读全文
摘要:1.src\share\vm\opto\compile.hpp 设置字段为不可重写的属性 2.src\share\vm\classfile\classFileParser.cpp 在类加载阶段验证其是否继承了final类 验证是否重写final方法 解析方法时,将修饰符进行传递 3.final变量
阅读全文
摘要:GC调优 固定参数: -Xms100m -Xmx100m -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:gclog.txt 1.并行收集器 实时监控结果如图: 从图中可以看到,在30s内发生了4618次YGC,耗时6.862s;发生了FullG
阅读全文
摘要:逃逸分析,在JDK1.7以后,默认开启的一个配置 会进行判断当前对象是否存在逃逸行为,逃逸分为:方法逃逸和线程逃逸; 方法逃逸:当前对象是否被其他方法引用; 线程逃逸:当前对象是否被其他线程引用; 如果没有逃逸是怎么优化当前对象? 1.栈上分配 直接在栈上分配即可 2.标量替换 例: Person
阅读全文
摘要:├─agent Serviceability Agent的客户端实现 ├─make 用来build出HotSpot的各种配置文件 ├─src HotSpot VM的源代码 │ ├─cpu CPU相关代码(汇编器、模板解释器、ad文件、部分runtime函数在这里实现) │ ├─os 操作系相关代码
阅读全文
摘要:为啥加锁可以解决可见性问题呢?因为某一个线程进入synchronized代码块前后,线程会获得锁,清空工作内存,从主内存拷贝共享变量最新的值到工作内存成为副本,执行代码,将修改后的副本的值刷新回主内存中,线程释放锁。 而获取不到锁的线程会阻塞等待,所以变量的值肯定一直都是最新的。
阅读全文
摘要:需要 原因: 防止指令重排; 其实在JAVA中进行new对象时, 有可能第一个线程进行创建的过程中,并且初始化完毕,第二个线程判断当前的指针不为空,则将对象返回,导致出错,所以需要加上volatile
阅读全文
摘要:根据追踪volatile反编译的class文件解析后发现 ACC_VOLATILE,通过查阅官网规范发现这个方法底层调用 storeload->fence->汇编指令 lock add1 0 * 0 相当于什么都没有做,只是为了执行汇编lock指令防止重新排序 HSDIS(HotSpot disas
阅读全文
摘要:help——查看命令帮助信息 cat——打印文件内容,和linux里的cat命令类似 pwd——返回当前的工作目录,和linux命令类似 cls——清空当前屏幕区域 session——查看当前会话的信息 reset——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重
阅读全文
摘要:常用工具 1.jps 主要是看虚拟机的相关参数配置 命令: JPS 查看运行的进程 2.Jinfo X 实时调整和查看虚拟机参数 命令: -flags 只查看JVM的配置信息 -sysprops 查看系统参数 +PrintGCDetails 增加GC详情 3.jstat 类加载,内存,垃圾收集,ji
阅读全文
摘要:java -X 查看vm(HotSport)参数设置 java -XX: +PrintFlagsInitial 查看JVM初始参数 java -XX: +PrintFlagsFinal 查看设置的参数
阅读全文
摘要:调优-参数 调优具体哪些方面? 提高吞吐量 提高响应时间(降低STW(STOP THE WORD)) 垃圾回收器的选择 -XX: +UseXXXGC 参数的设置 -XX: PermSize 永久区(JDK8以前) -Xms 堆初始值 (堆) -Xmx 堆最大值 -XX: NewRatio 年轻代和老
阅读全文
摘要:G1相关的参数配置 -XX:+UseG1GC: 设置使用G1垃圾回收器 -XX:MaxGCPauseMillis=n: 最大GC停顿时间,毫秒值 -XX:InitatingHeapOccupancyPercent=n: 当堆空间占用到n兆时就触发GC(45) -XX:GoncGCThreads=n:
阅读全文