提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
参考黑马的视频课:添加链接描述
前15节
一、jvm是什么?
java virtual machine java虚拟机,能屏蔽机器不同操作系统之间的区别,将程序编译成cpu可识别的二进制码
jre=jvm+基础类库
jdk=jvm+基础类库+编译工具
二、程序计数器
寄存器,记住下一条指令的地址。
程序计数器是线程私有的,不会存在线程溢出
三、栈
每个线程运行需要的内存叫虚拟机栈
每个栈对应多个栈帧,对应每次方法调用的内存
每个线程只有一个活动栈帧,对应正在执行的方法
栈帧包含方法、成员变量
每个栈默认大小1024kb(除了windows)
栈不涉及垃圾回收,栈帧出栈时,会自动被回收,但不是GC垃圾回收
栈内存越大,线程数越少,效率越低。所以栈内存合理即可
方法内的局部变量是线程安全的,只要变量不传出方法,就是线程安全的
栈内存溢出:方法间的递归调用,即栈帧过多
2.成员变量之间的相互引用
四、CPU占用高
1.top命令查看cpu占用最高的进程
2.用ps命令查看对应线程: ps H -eo pid,tid,%cpu | grep 32655
3.找到对应的写代码行数:jstack 32655 中找到16进制的线程,下面有对应的方法行
长时间没有响应
jstack 32655 翻到下面有报错信息,查看报错信息并返回行数。