![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
文章平均质量分 60
kobexzf
这个作者很懒,什么都没留下…
展开
-
一次频繁fullgc但内存不下降
mat显示beanFactory retainedHeap大,List Objects with outgoing references 显示dependentBeanMap的retainedHeap大,本地debug分析 struts2-spring通过StrutsSpringObjectFactory(ObjectFactory)来进行对象创建 对象如action由Spring创建(beanDefinition和singletonObjects都不会保留,简单来说只是借用spring创建对象的能力创建对原创 2021-03-09 16:01:49 · 656 阅读 · 1 评论 -
jvm问题排查
结合threaddump(jstack ),heapdump(jmap和jhat或mat ),gc日志进行问题分析 cpu过高,top找出过高进程,top -Hp pid找出过高线程,jstack找出对应线程(nid,操作系统线程id)的堆栈,可能是gc线程频繁gc导致,或普通线程做密集运算。 频繁gc分析heapdump和gc日志,有可能System.gc()频繁调用,或者是在生成大量对象 ...原创 2019-09-18 20:38:56 · 103 阅读 · 0 评论 -
volatile
store,load: 硬件层的内存屏障,禁止两侧指令重排,store能写回主存,load能更新缓存。 java组合的屏障: storestore(store):store1,storestore,store2,store2执行前,确保store1写回主存 storeload(store):确保store1写回主存,大多处理器下,开销很大,万能,兼具其他三种屏障 loadload(load):l...原创 2019-07-31 16:33:37 · 109 阅读 · 0 评论 -
synchronized,ReentrantLock可见性
happens-before 程序次序,传递,volatile,lock的4个规则 ReentrantLock: thread A,B(A修改变量,B读取变量) A unlock时需修改volatile state,B lock时需读取volatile state A 修改 happens-before A write volatile happens-before B read volatile...原创 2018-12-22 18:16:21 · 820 阅读 · 0 评论 -
线程安全与锁优化
乐观锁: cas aba 版本号(AtomicStampedReference) 时间戳 AtomicMarkableReference(boolean) 可重入代码:绝对线程安全,不依赖共享数据(使用参数,局部变量) 自旋锁:认为锁很快释放,占用cpu循环获取锁,超过一定次数(时间)再挂起线程,自旋次数上限-XX:PreBlockSpin,启用自旋-XX:+UseSpinning(1.6后默认开...原创 2018-12-21 17:40:02 · 92 阅读 · 0 评论 -
内存模型和线程
处理器快,其他太慢了,包括访存,加入高速缓存 高速缓存带来缓存一致性问题:同一块主存,各自的缓存不一样,缓存与主存交互时候需通过缓存一致性协议 jmm 屏蔽硬件和操作系统差异,定义(共享)变量访问规则 变量存在主存,线程操作变量必须工作内存中进行(包括volatile),工作内存含主存变量副本 低层次:一般来说,主存对应内存,工作内存对应寄存器和高速缓存 8原子操作 lock 将主内存变量标识为...原创 2018-12-20 19:35:54 · 115 阅读 · 0 评论 -
运行期优化
jit: 把热点代码(多次调用方法或循环,字节码)编译成本地机器码,放于方法区codecache。 interpreted mode: 只解释,不编译 compiled mode:优先编译,不行解释 mixed mode:混合工作 Client Compiler (c1)-client Server Compiler (c2 )-server 一般混合模式加单个编译器工作,jdk1.7加入分层编......原创 2018-12-20 18:05:28 · 106 阅读 · 0 评论 -
编译期优化
javac: 1 词法,语法分析,填充符号表 词法分析:字符流转为token(int a=b+2 转为6个token) 语法分析: 根据token序列构造抽象语法数 2 注解处理 3 语义分析,生成class文件 处理int a=b(b是boolean)+c,编译不通过,解语法糖 语法糖: 1 泛型擦除:Map<String,String> - Map map.get - (Strin...原创 2018-12-20 17:03:26 · 83 阅读 · 0 评论 -
字节码执行引擎
栈帧: 局部变量表:编译时确定大小,slot(一般32bit,可存放reference用于找到对象和类型数据) 连续2slot(64bit,long,double,可以非原子操作,反正这是线程私有的) 实例方法this,参数,局部变量 static方法参数,局部变量 slot可重用,局部变量必须先赋值后使用 操作数栈:编译时确定大小,基于栈(即操作栈)的解释执行引擎 动态连接:指向方法的引用(运行......原创 2018-12-20 15:04:35 · 155 阅读 · 0 评论 -
类加载详解
加载 通过全限定名获取二进制流,生成方法区类数据,生成Class对象(作为访问类数据入口,Hotspot放在方法区内) 连接:验证,准备,解析 验证:验证魔数,class文件版本,是否有父类,是否继承final类(不被允许) 准备:类变量分配内存空间并赋初值,若为static final 则直接赋最终值 解析:符号引用转为直接引用(指针,偏移,句柄),有一些可在初始化后即使用的时候再做即动态绑定,......原创 2018-12-20 11:23:03 · 148 阅读 · 0 评论 -
GC-详解
引用计数:解决不了互相引用的问题 GC Roots可达性分析 GC Roots对象:jvm栈,native栈,static ,常量 强,软(oom之前回收),弱(下一次gc回收),虚(唯一作用就是gc时能收到系统通知) 若重写finalize方法,且以前没有调用它,则可调用finalize方法,可完成一次对象的自救 回收方法区: 回收常量(需运行时常量池在方法区内,如"abc") 回收类/类卸载(............原创 2018-12-19 17:42:43 · 171 阅读 · 0 评论 -
OOM说明
1 堆 -XX:+HeapDumpOnOutOfMemoryError 分析dump出的堆转储快照,确定是否有内存泄漏,不存在是否可调节参数如-Xmx,分析是否对象真的需要存在这么长时间 2 jvm栈和native栈 单线程永远sof, 多线程 可能sof,也可能oom(-Xss越大,越容易出现,操作系统内存-堆-方法区=-Xss * 线程数量,大概估算) 3 方法区,运行时常量池 运行时常量池1......原创 2018-12-19 15:55:23 · 120 阅读 · 0 评论 -
jvm 运行时数据区/对象
jvm栈(局部变量表编译期大小确定,stackoverflow:栈深度太大超-Xss,oom:申请不到内存,比如线程太多了) native方法栈(sof和oom) pc(当前字节码指令行号,native方法为空,无oom) 堆(对象,数组,新生代(Eden,from/to survivior)老年代,-Xms初始 -Xmx最大) 方法区(code cache(jit),静态变量,类信息,常量,oo............原创 2018-12-19 14:10:23 · 201 阅读 · 0 评论