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

  • 相关阅读:
    11-js事件基础
    tomcat线程池-深度分析tomcat线程池设计与现实
    ide快捷键以及js的小知识
    搭建自己的以图搜图系统 (一):10 行代码以图搜图
    3D编程模式:依赖隔离模式
    【无标题】
    Revit二次开发-WPF ProgressBar 执行程序中显示进度条
    【UCIe】UCIe Runtime Link Test Using Parity
    mvcc机制中的快照读和当前读
    uniapp新版微信小程序用户隐私协议授权
  • 原文地址:https://blog.csdn.net/qq_56573709/article/details/133847037