jvm notes

40 篇文章 0 订阅
运行时数据区
program counter register 程序计数器
java方法 存 正在执行的字节码指令地址 native方法 为空undefined
每个线程有一个独立的
规范没有规定ooM

vm stack
线程私有
一个方法有一个stack frame 存局部变量 操作数栈 动态链接 方法出口 方法调用 压栈 出栈
如果线程请求的栈深度大于虚拟机允许的 stackoverflowerror
如果vm stack可以动态扩展 扩展时无法申请到足够的内存 OOM
private static void oom(int i){
while(i>1){
oom(i);
}
}

public static void main(String[] args) {
oom(2); //28592 call
}

native method stack
对应native方法
也会sof oom

java heap
线程共享
存 对象实例
新生代 老生代 survior
线程私有的分配缓冲区 thread local allocation buffer
没有内存完成实例分配 并且无法扩展 OOM -Xmx -Xms

method area 方法区
线程共享
类信息 常量 静态变量 (字符串常量池 永久代)
hotspot 永久代实现方法区(省去为方法区写内存管理) permanent generation
-XX:MaxPermSize
OOM
运行时常量池runtime constant pool
class文件常量池 运行期也可以放进去 string.intern()
导致OOM


direct memory
nio 使用时分配
导致内存区域总和大于物理内存限制 动态扩展时出现OOM


对象的内存布局
header hashcode gc分代 锁状态
instance data
padding 占位符

栈容量 -Xss
每个线程分配栈容量 线程太多可能导致内存不够 栈内存OOM

OOM Error message
Java heap space
unable to create new native thread
PermGen space //动态生成大量class 大量jsp osgi
diect memory //dump文件很小 nio


GC
引用计数 无法回收循环引用
可达性分析 GC Roots 可达到的对象
引用 不等于必要, 解决方法: 强引用 软引用 弱引用 虚引用

finalize方法只会被调用一次 下次GC不会调用

永生代 常量池回收 无用类回收

垃圾收集算法
标记-清除算法
效率问题
内存碎片问题
复制算法
内存变为原来一半
商业虚拟机用此算法回收新生代
标记-整理算法
对老生代使用
存活对象向一端移动
分代收集算法
根据分代使用以上几种算法

内存分配
小对象直接进入eden
大对象(需要大量连续内存空间,很长的字符串及数组) 避免经常出现短命的大对象提前触发GC

新对象进入eden,熬过一次Minor GC进入survivor,age设为1,到15岁后进入老生代
动态年龄判定

线程快照
threaddump/javacore
堆转储快照
headdump/hprof


jvm监控命令
jps
jinfo
jstat -gcutil vmid
jmap 堆快照 -heap -histo
jhat 分析堆快照文件
jstack 线程快照

jconsole
visualVM
heap analyzer
memory analyzer tool

class loader
任一个类 由类加载器和类本身 确立其在JVM中的唯一性
从JVM看 2种类加载器
C++实现的bootstrap classloader, JVM的一部分
java实现的其他加载器, JVM外部
java开发人员看
bootstrap 加载JAVA_HOME/lib下的
extension 加载JAVA_HOME/lib/ext下的
application 加载classpath下的

类加载器的层次用组合实现
加载类的时候首先委托父类,父类没法再自己加载
不是所有都是这样, jndi等spi、OSGi不是

GC性能指标
throughput GC花的时间越少,系统计算吞吐量越大 //适用于后台非实时计算
pause time stop the world时间// 实时交互系统很看重,如网站
frequency 频率
footprint a measure of size, such as heap size
promptness 对象成为垃圾到对象内存重新变为可用的时间间隔

GC设计抉择
串行 并行
并发 stop the world
压缩 不压缩 复制


behavior-based tuning
-XX:MaxGCPauseMillis=n
-XX:GCTimeRatio=n
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值