• jvm内存模型


    jvm内存模型

    java语言具有跨平台的特点

    java虚拟机,从软件层面屏蔽了不同操作系统在底层硬件与指令的区别
    使得java语言跨平台,一次编译,处处执行,不同类型的JDK包含不同的JVM

    jvm内存模型

    堆: 存放new 出来的对象,多个线程共享,栈里面的变量结果很多是对象,而对象在堆中,存的是地址,也就是指针由栈指向堆,栈和堆,方法区和堆都是指针的关系
    线程栈: 用来存放变量(临时变量,局部变量)是由一个一个栈帧组成的,一个方法对应一个栈帧内存区域,能够实现变量隔离;栈数据结构特点是FILO先进后出,与方法的调用相吻合
    本地方法栈: 用native修饰的,相当于一个未实现的接口,底层调用C++代码执行,而本地方法执行所需要的内存空间则放在本地方法栈中
    方法区: 也成为元空间,存放常量,静态变量,类信息,多个线程共享
    程序计数器: 存放下一个要执行的代码在方法区的地址,java运行是多线程,cpu的时间片被抢占去了,此线程会被挂起,当恢复时,可以根据此程序计数器记录的线程执行的地址继续执行下去
    类装载子系统: 负责从文件系统或者网络上加载class文件
    字节码执行引擎: 在执行程序过程中动态修改程序计数器的值
    在这里插入图片描述

    jvm调优工具(jdk自带jvisualvm命令工具)

    若windows系统下cmd打开输入命令找不到就需要自己下载安装
    1.安装下载地址:jvisualvm下载地址
    在这里插入图片描述
    2.配置jdk路径,否则会检测不到java程序(在jvisualvm安装目录下的etc的visualvm.conf文件内,配置visual_jdkhome=本地的jdk路径)
    在这里插入图片描述

    3.安装完成后,安装Visual GC插件(Tools->Plugins->搜索Visual GC)
    在这里插入图片描述在这里插入图片描述
    4.安装成功后运行程序效果
    在这里插入图片描述

    jvm参数说明

    java ‐Xms2048M ‐Xmx2048M ‐Xmn1024M ‐Xss512K ‐XX:MetaspaceSize=256M ‐XX:MaxMetaspaceSize=256M ‐jar app.jar

    标准化参数(输出结果稳定,不会随jvm的版本变动而变化):如java -version 或 java-help
    非准化参数:如-X或这-XX
    堆内存的设置:
    -Xms:memory start
    -Xmx:memory max
    -Xmn:memory new
    栈内存设置:
    -Xss:stack size
    元空间(方法区内存设置):
    -XX:MaxMetaspaceSize:只受制于本地内存的大小
    -XX:MetaspaceSize:不设置的话默认21M,会自动收缩,一般还是手动设置,因为达到默认值就会不断启动full gc导致程序启动非常慢
    容量单位:bit —8—>B----1024------> KB----1024------> MB----1024------> GB----1024------> TB
    例子:本地测试栈内存设置(128k和1M)
    设置栈内存128k:‐Xss128k在这里插入图片描述
    程序运行结果:嵌套调用方法2532在这里插入图片描述
    设置栈内存1M:‐Xss1M
    在这里插入图片描述
    程序运行结果:嵌套调用方法25439
    在这里插入图片描述

  • 相关阅读:
    真实环绕的魅力,飞利浦杜比全景声影院B8967开箱
    Spring Cloud学习(九)【Elasticsearch 分布式搜索引擎01】
    qt的类用c++表示
    【排序算法】归并排序(C语言)
    openharmony容器组件之Navigator
    如何解决pc端屏幕显示缩放比例125%,150%对页面布局的影响
    Android逆向题解 攻防世界难度4- Android2.0
    80W美团架构师整理分享出了Spring5企业级开发实战文档
    剑指 Offer 30. 包含min函数的栈C++(详解)
    vue中,js改变字符串中指定字符的颜色 & 在字符串中添加点击事件
  • 原文地址:https://blog.csdn.net/weixin_48164819/article/details/126444419