jvm-04-调优实践

如何利用高性能硬件

使用若干个32位虚拟机建立逻辑集群来利用硬件资源。

需要注意:

  1. 全局资源竞争
  2. 资源池利用
  3. 32位的内存限制
  4. 本地缓存的浪费

对于CPU资源不敏感的应用,改用CMS(追求低停顿时间)垃圾收集器。

堆外内存导致溢出错误

Direct Memory收到系统进程所能管理的最大内存限制,不能在空间不足时通知系统回收,只会在 Full GC 时回收。

调用系统命令

使用 System.runExce() 调用系统命令有一定开销。

jvm笔记-02-垃圾收集器与内存分配策略

对象的生存与死亡

如何判定一个对象的生与死

  1. 引用计数法 Reference Counting

    给对象中添加一个引用计数器,被引用加1,引用失效减1,计数器为0则对象可以被回收。
    缺点:很难解决对象之间互相循环引用的问题。

  2. 可达性分析法 Reachability Analysis

    通过一系列 GC Roots 的对象作为起点,向下搜索,遍历路径称为引用链。当一个对象到 GC Roots 不可达时,证明此对象是不可用的。
    GC Roots对象包括:

    1. 虚拟机栈中引用的对象
    2. 方法区中静态常量引用对象
    3. 方法区中常量引用对象
    4. 本地方法栈中引用的对象

继续阅读全文 »

Jvm笔记-01-Java运行时数据区域与对象

运行时数据区域

1. 程序计数器 Program Counter Register

通过改变计数器值选取下一条指令完成分支、循环、跳转、异常处理、线程恢复等基础功能。
线程私有,互不影响。

2. Java虚拟机栈 JVM Stacks

线程私有,生命周期与线程相同。
每个方法执行时创建栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等,方法调用与完成对应入栈和出栈。
Java内存区粗略分为堆和栈,栈即虚拟机栈。
配置 -Xss 参数设定栈帧大小

继续阅读全文 »