JVM内存模型

双亲委派机制的不足

Tomacat中两个应用的spring版本不同,按照双亲委派机制的话会出问题

多生成一个类加载器

MyClassLoader c = new MyClassLoader(“war包地址”);

JVM内存模型

其中类装载子系统(在C++中执行)以及字节码执行引擎(在C++中执行)

一般都是new出来的对象,存放在堆中

存放局部变量(也可以叫做线程栈)

在JVM中一个方法对应一块栈帧内存区域

如果方法中还有局部变量的话

那么会在这个栈帧区域再生成一个栈用来存放局部变量

注意

采用先进后出

栈帧表

局部变量表:存放类似于:a=1,b=2

操作数栈:就是操作运行中需要做操作的数据,相当于一个中间表

动态链接:在运行时,把符号引用转换为直接引用

方法出口:根据方法出口的信息放回到调用方法的指定位置

程序计数器

程序马上要运行的这一行代码的内存位置

作用:被另一个优先级更高的线程抢占了cpu之后,会告诉cpu从哪一行代码继续执行

Main方法中的局部变量表中:

Main main = new Main();

它会在栈帧的局部变量表中存放 对象main 在堆中的地址

方法区

作用:存放常量池/静态变量/类信息都会放在方法区中

本地方法栈

需要调用本地方法的时候,给本地方法分配地址

本地方法:一开始JVM都是C语言实现的,

STW

作用:停止所有用户的操作

Java虚拟机调优,主要就是减少full  gc

JVM为什么 设计STW ?

底层收集垃圾的过程太复杂了,在找对象的过程中需要STW,不然还没找到垃圾对象,操作执行完了,变量对象都出栈了,栈和堆里的对象都变成了垃圾对象

JVM内存参数设置

对方法区需要设置内存值,默认是21M

栈的默认大小是1M

在 VM options 中设置 -Xms 512K

-Xss设置越小count值越小,说明一个线程栈里能分配的栈就越少,但是对JVM整体来说能开启的线程数会更多

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

—熙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值