• 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整体来说能开启的线程数会更多

  • 相关阅读:
    解读大模型(LLM)的token
    类的继承C++
    腾讯云域名API解析升级版本(通过Java实现)腾讯云动态公网IP绑定域名实现内网服务器公网穿透
    【数据结构】 二叉搜索树的实现
    CentOS 30分钟部署免费在线客服系统
    【Loadrunner】学习loadrunner——性能测试基础篇(一)
    Linux网络编程
    多行省略号
    SpringCloud(十) - Docker
    ubuntu为可执行程序添加桌面图标
  • 原文地址:https://blog.csdn.net/qq_56573709/article/details/133847037