
jvm
无名居
这个作者很懒,什么都没留下…
展开
-
java虚拟机-- Java代码是怎么运行的?
从虚拟机角度来说,其将Java代码编码为class文件,并放在虚拟机中的方法区。运行时,当执行一个方法的时候,虚拟机会生产一个栈帧,可以不连续,当方法执行结束,将此栈帧弹出.虚拟机包含 堆、方法区。PC寄存器、Java方法栈、本地方法栈(用 C++ 写的 )...原创 2018-12-07 19:49:09 · 716 阅读 · 0 评论 -
jvm系列--虚拟机性能监控工具
JDK命令行工具jpsjps可以列出正在运行的虚拟机内存,是一款简单单一的工具命令 jps [options] [hostid]jstat虚拟机统计信息监视工具,是运行期地位虚拟机性能问题的首选工具,他可以显示本地或者远程的类加载、内存、垃圾收集等信息。命令:jstat [option vmid [interval[s|ms] {count}]]运行 jstat -gc pid ...原创 2019-01-30 22:20:49 · 188 阅读 · 0 评论 -
jvm系列--内存分配和回收策略
对象优先在Eden区分配对象的内存分配,大方向上就是在堆上进行分配,当Eden区中没有足够的空间分配时,会进行一次minor GC–年轻代GC。写一段测试代码来测试下参数:-Xmx20M -Xms20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:+UseSerialGC/** * @author wangmj * @si...原创 2019-01-29 22:50:33 · 172 阅读 · 0 评论 -
jvm系列- 垃圾收集器
垃圾收集算法标记清除算法步骤:首先遍历查询所有有引用的对象进行标记,第二步遍历堆,把所有未标记的对象进行清除缺点:会产生内存碎片复制算法步骤:需要同样大小的内存,先遍历所有的引用对象并进行复制,复制的同时进行碎片的整理,为了解决两倍大小的内存,设置堆内存的时候设置成Eden区和Survivor区域,复制的时候将存活的对象复制到Survivor区域缺点:需要两倍大小的内存标记-整...原创 2019-01-29 17:28:28 · 174 阅读 · 0 评论 -
JVM系列--垃圾回收器和内存分配
判断对象是否存活引用计数法可达性分析算法引用计数法:引用计数法主要为记录一个对象被引用的次数,当引用数大于0,则不会被垃圾回收;对象没被一次引用,则计数加1,对象失效时计数减一;这个方法对jvm回收来说非常高效,但是不会很准确,假如说两个对象互相引用,即使这两个对象没有其他地方应用,也会一直存在,不会被回收。可达性分析可达性分析主要由JVM根据GC root为跟,依次向下找其引用的...原创 2019-01-29 16:12:25 · 228 阅读 · 0 评论 -
JVM系列-JVM运行时内存区域
JVM运行时内存区域构成程序计数器虚拟机栈本地方法栈堆内存方法区程序计数器程序计数器所占内存非常小,为线程私有变量,可以看住当前线程执行行数的记录,字节码解释器通过程序计数器来查找下一条指令,及线程恢复切换等操作。Java虚拟机栈Java虚拟机栈主要存放基本类型变量及对象变量的内存地址信息,为线程私有变量。每个方法在执行的时候都会创建一个栈帧(Stack Frame)用于存...原创 2019-01-28 15:12:55 · 268 阅读 · 0 评论 -
原子操作原理
处理器实现原子操作使用总线锁保证原子性我们知道处理器存在内存与缓存,当线程读取数据时,先会去取缓存中的数据,若没有再去内存中拿取数据,这样就会发生缓存中与内存中的数据不一致,从而导致不正确的结果。为了得到正确的结果,可以在总线上加锁,也就是在内存与缓存上都加锁,也就是给处理器一个#LOCK信号,这样线程就可以独占锁使用缓存锁保证原子性锁的粒度减少Java实现原子操作使用...原创 2018-12-27 22:43:38 · 318 阅读 · 0 评论 -
利用jstack打印线程dump信息
1.进入到jdk/bin目录2.jstack pid > /home/data/dump3.查看各线程状态下的数量grep java.lang.Thread.State /home/data/dump9001 | awk '{print $2$3$4$5}' | sort |uniq -c4.分析:37个线程处于WAITING(onobjecmonitor)状态5...原创 2018-12-26 22:05:58 · 2745 阅读 · 0 评论 -
jvm类加载机制
类加载时机类从被加载到虚拟机内存,到卸载出内存,要经历的生命周期:加载(Loading)=>验证(Verification)=>准备(Preparing)=>解析(Resolving)=>初始化(Initialization)=>使用(Using)=>卸载(Unloading),其中验证、准备、解析成为连接阶段,可以参考netty里面的过程来记忆,netty...原创 2019-02-17 19:32:29 · 225 阅读 · 0 评论