JVM学习笔记Day01

JVM学习笔记Day01


前言

今天开始学习java虚拟机了,本来说打算看视频的,但发尚硅谷的视频内容太多了,时长五十多个小时,时间已经来不及了。所以只能选择时长较少的黑马程序员课程,看评价也挺高的,但可能深度没那么够。那就先从宏观上了解一下大致技术和知识,后续准备面试的时候,背背八股文,里面有不懂的再网上查一查,只能这样子了。


JVM:Java Vitural Mechine -java程序的运行环境(java二进制字节码的运行环境) 好处:一次编写,到处运行; 自动内存管理,垃圾回收功能; 数组下标越界检查; 多态。 JVM,JRE,JDK差别:

在这里插入图片描述
java源代码 >jvm指令(二进制字节码)>解释器>机器码>CPU执行
程序计数器:记住下一条jvm指令的执行地址,通过寄存器存储。(线程私有,不会内存溢出)
虚拟机栈:线程运行需要的内存空间
栈帧:每个方法运行时需要的内存。包括参数,局部变量,返回地址。
每个线程只能由一个活动栈帧,对应当前执行的方法
垃圾回收不涉及栈内存。
栈内存不是分配的越大越好,通过-Xss设置,越大的话,线程数就越少
在这里插入图片描述
栈内存溢出的情景:栈帧过多导致栈内存溢出,栈帧过大导致栈内存溢出。
线程运行诊断:
1.CPU运行过大
使用top 命令,查看运行占用情况,定位到进程;
使用 ps H -eo pid,tid,查看对应线程和进程
或者可以用筛选命令:ps H -eo pid,tid,%cpu | grep XX(具体进程id)
jstack 进程id。可以根据线程id定位到代码位置
jsack还可以排查死锁问题。
本地栈方法栈:为本地方法提供内存空间(hashcode,notify…)
在这里插入图片描述
-Xmx8m(设置堆空间)
堆内存诊断:
ips工具:查看当前系统中有哪些java进程
jmap -heap 进程id
控制台输入jconsole,查看运行情况
-XX:MaxMetaspaceSize=8m 最大元空间内存 这是jdk8之后才出现元空间概念的,占用的本地内存。
在这里插入图片描述
二进制字节码:类基本信息,常量池,类方法定义,包含了虚拟机指令
常量池就是一张表,虚拟机指令根据这张常量表找到要执行的类名,方法名,参数类型和字面量等信息。
在这里插入图片描述
在这里插入图片描述
JDK1.8中StringTable在堆中,之前是在永久代中,是因为会触发垃圾回收,节约内存,提高效率。
-XX:StringTableSize=桶个数
在这里插入图片描述
直接内存是用Unsafe对象完成直接内存的分配回收,并回收需要主动调用freeMemory方法。
在这里插入图片描述
Java中的五种引用:
在这里插入图片描述
在这里插入图片描述
垃圾回收算法:
标记清除法:速度快,但易产生空间碎片
标记整理法:无内存碎片,有对象移动,速度慢
复制算法:不会产生碎片,会占用双倍的内存空间
分代垃圾回收机制:
在这里插入图片描述
分代垃圾回收:
在这里插入图片描述
堆初始大小:-Xms
dui堆最大大小:-Xmx
新生代大小:-Xmn或 -XX:MaxNewSize=size
在这里插入图片描述
垃圾回收器:
1.串行:单线程,堆内存较小,适合个人电脑
2.吞吐量优先:多线程,堆内存较大,多核cpu,让单位时间内,STW的时间最短 0.2 0.2 =0.4
3.响应时间优先:多线程,堆内存较大,多核cpu,尽可能让单次STW的时间最短 0.1 0.1 0.1 0.1 0.1 = 0.5
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值