JVM笔记

1 篇文章 0 订阅

手动导入一位灵魂画手朋友所作的概略图
在这里插入图片描述
简单介绍下几个内容:
一、 JVM按照大区域共3个:
1、类装载子系统:主要用于从文件系统或者网络中加载class文件
2、字节码执行器:程序最终的形态都是机器可识别的字节码,需要一个能识别此类字节码的引擎来执行程序字节码
3、运行时数据区:其中包含程序运行时候的一些模块,重点理解。

接下来我们简单说说运行时数据区的内容分为5个区域
1、堆:对象的保存
2、方法区:类的信息,常量、和一些静态变量等。
3、栈:虚拟机栈,存栈帧和对象指针(索引)
4、本地方法栈:核心内容的保存调度,由c++来完成
5、程序计数器:记录程序执行的状态,位置等信息记录

在栈和堆这里我们再重点聊一下:
-栈、除了指针索引外,在每加载一个方法的时候就会往栈里面压入此方法的栈帧。它主要包含了图中几个部分,从方法层面来看不外乎是局部变量表,操作数栈,动态链接,方法出口等。
1、局部变量表里面包含了方法中定义的一些变量如a=0;中的a这个变量。
2、如1中描述的变量值0,程序会操作这块儿来进行计算,它会放于操作数栈中,并且新的结果值也是放在这里的
3、首先链接分为静态链接:如果一个class文件被装载进JVM内部,被调用的目标方法在编译期可知,且运行期间不变时,将符号引用转为直接引用的过程称为静态链接。动态链接:编译期无法确定,只能在程序运行期间将调用方法的符号引用转为直接引用
4、方法的返回

二、JVM参数设置
Spring Boot程序的JVM参数设置格式(Tomcat启动直接加在bin目录下catalina.sh文件里)。
JVM内存参数大小该如何设置?
JVM参数大小设置并没有固定标准,需要根据实际项目情况分析,给大家举个例子这里引用了大佬的内容
在这里插入图片描述
上图为堆中gc的资源分配比例和划分。
以下一个场景的设计
在这里插入图片描述
可调用例:

java -Xms3072M -Xmx3072M -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M

在这里插入图片描述
这样的配置的话,大概14秒会进新一次新生代gc。请求高并发过程,几分钟内的热点活动。这样gc的频率太高了。影响用户体验。这时候可以增加新生代区的资源大小。
如果尽量减少full gc 的次数可以这样弄一弄

java -Xms3072M -Xmx3072M -Xmn2048M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M

结论:通过上面这些内容介绍,大家应该对JVM优化有些概念了,就是尽可能让对象都在新生代里分配和回收,尽量别
让太多对象频繁进入老年代,避免频繁对老年代进行垃圾回收,同时给系统充足的内存大小,避免新生代频繁的进行垃
圾回收.

未完待续!!!!!!!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值