JVM
小小的过
这个作者很懒,什么都没留下…
展开
-
JVM系列之一:基础
今天开始,我们来讲下JVM。一个好的工程,除了代码优化之外,还需要有一个优化的运行环境,我们通过JVM系列来了解JVM和常用的优化手段。JVM的概念 JVM是Java Virtual Machine的简称,意为Java虚拟机。JVM使用软件模拟Java 字节码的指令集虚拟机 指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统有哪些虚拟机 VMWa...原创 2018-03-01 23:42:24 · 233 阅读 · 0 评论 -
JVM系列之二:GC算法与原理
这节我们介绍GC的算法。GC的概念 Garbage Collection 垃圾收集 Java中,GC的对象是堆空间和永久区 GC算法 引用计数法 没有被Java采用 引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。 ...原创 2018-03-02 00:09:29 · 264 阅读 · 0 评论 -
JVM系列之三:常用JVM配置参数
GC参数串行收集器– 最古老,最稳定– 效率高– 可能会产生较长的停顿– 新生代、老年代使用串行回收– 新生代复制算法– 老年代标记-压缩– -XX:+UseSerialGC 并行收集器– 新生代复制算法,老年代标记-压缩– -XX:+UseParNewGC– Serial收集器新生代的并行版本– 只会影响新生代– 可以和CMS算法一起使用– -XX:+UseParallelGC– ParNew是...原创 2018-05-06 23:39:26 · 278 阅读 · 0 评论 -
JVM系列之四:类装载器
class装载验证流程加载– 装载类的第一个阶段– 取得类的二进制流– 转为方法区数据结构– 在Java堆中生成对应的java.lang.Class对象链接– 验证· 目的:保证Class流的格式是正确的· 文件格式的验证· 是否以0xCAFEBABE开头· 版本号是否合理· 元数据验证· 是否有父类· 继承了final类?· 非抽象类实现了所有的抽象方法· 字节码验证 (很复杂)· 运行检查· ...原创 2018-05-06 23:45:13 · 152 阅读 · 0 评论 -
JVM系列之五:性能监控工具
工欲善其事,必先利其器。这期我们来介绍常用的性能监控工具,用于性能监控和问题排查。在最后我们再分析一下堆,讲解一下内存溢出的原因。 系统性能监控Linux– uptime • 系统时间• 运行时间n 例子中为7分钟• 连接数n 每一个终端算一个连接• 1,5,15分钟内的系统平均负载n 运行队列中的平均进程数 – Top • 第一行同uptime• 第三行到第五行是CPU和内存的使用情况• 图中下...原创 2018-05-06 23:58:33 · 162 阅读 · 0 评论 -
JVM系列之六:堆分析
内存溢出(OOM)的原因– 在JVM中,有哪些内存区间?堆永久区Java栈直接内存– 堆溢出public static void main(String args[]){ ArrayList<byte[]> list=new ArrayList<byte[]>(); for(int i=0;i<1024;i++){ list.ad...原创 2018-05-07 00:02:41 · 183 阅读 · 0 评论 -
JVM系列之七:字节码执行
Javap– class文件反汇编工具– javap –verbose Calcjava 文件public class Calc { public int calc() { int a = 500; int b = 200; int c = 50; return (a + b) / c; }}编译后Class文件public int calc(); Code: Stack=2, Lo...原创 2018-05-07 00:07:48 · 154 阅读 · 0 评论