当前位置: 首页 > news >正文

JVM基础篇-虚拟机栈

JVM基础篇-虚拟机栈

在这里插入图片描述

定义

Java Virtual Machine Stacks (Java 虚拟机栈)

  • 每个线程运行时所需要的内存,称为虚拟机栈
  • 每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存
  • 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法

栈帧组成部分:方法参数、局部变量、返回地址

执行流程

方法执行时执行压栈操作,如果该方法调用了其他方法,其他方法被调用时执行压栈操作,方法执行完成后执行出栈操作

在这里插入图片描述

问题辨析

垃圾回收是否涉及栈内存?

答:不涉及,当方法执行完成后会执行出栈操作,对应的栈内存会被自动释放

栈内存分配越大越好吗?

答:不是,栈内存的越大只会使得方法递归调用的次数增大,但是如果栈内存越大,则意味着每个线程占用的内存越大,而可同时运行的线程数则会变少

📌指定栈内存大小

-Xss:
  • 如果不设置,在Linux/MacOS中默认为1024KB,Windows系统则依赖于虚拟内存的大小

方法内的局部变量是否线程安全?

  • 如果方法内局部变量没有逃离方法的作用访问,它是线程安全的
  • 如果是局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全,如果方法参数或返回值为基本类型,则依然线程安全
package com.vmware.stack;public class Demo1 {public static void main(String[] args) {StringBuilder sb = new StringBuilder();sb.append(1);sb.append(2);sb.append(3);new Thread(() -> {m2(sb);}).start();}/*** @apiNote 该方法中StringBuild线程安全,因为外部无法方法*/public static void m1() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append(1);stringBuilder.append(2);stringBuilder.append(3);System.out.println(stringBuilder.toString());}/*** @param builder* @apiNote 该方法线程不安全,因为StringBuild可能有其他线程访问*/public static void m2(StringBuilder builder) {builder.append(1);builder.append(2);builder.append(3);System.out.println(builder.toString());}/*** @apiNote 该方法线程不安全,可能有其他线程访问返回值进行修改* @return*/public static StringBuilder m3() {StringBuilder builder = new StringBuilder();builder.append(1);builder.append(2);builder.append(3);return builder;}
}

栈内存溢出

  • 栈帧过多导致栈内存溢出
    • 方法递归调用
    • 部分第三方类库溢出,例如json序列化循环依赖
  • 栈帧过大导致栈内存溢出

相关文章:

JVM基础篇-虚拟机栈

JVM基础篇-虚拟机栈 定义 Java Virtual Machine Stacks (Java 虚拟机栈) 每个线程运行时所需要的内存,称为虚拟机栈每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动…...

KepwareEX配置API REST接口

服务端Kepware设置 API允许连接设置 创建通道 请求地址(POST)&#xff1a; https://<主机名_或_ip>:<端口>/config/v1/project/channels 以下示例使用postman工具访问API创建了一个名为Channel1 的通道&#xff0c;其使用在本地主机运行的服务器中的Simulator …...

【python】python求解矩阵的转置(详细讲解)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…...

Mr. Cappuccino的第56杯咖啡——Mybatis拦截器

Mybatis拦截器 概述应用场景项目结构实现分页查询其它拦截器的使用 概述 Mybatis允许使用者在映射语句执行过程中的某一些指定的节点进行拦截调用&#xff0c;通过织入拦截器&#xff0c;在不同节点修改一些执行过程中的关键属性&#xff0c;从而影响SQL的生成、执行和返回结果…...

容器化安装环境EFK搭建

容器化安装环境 Docker中安装并启动ElasticSearch 前置配置 第一步&#xff1a;在宿主机上执行echo “net.ipv4.ip_forward1” >>/usr/lib/sysctl.d/00-system.conf 2.第二步&#xff1a;重启network和docker服务 [rootlocalhost /]# systemctl restart network &&…...

基于 Debian GNU/Linux 12 “书虫 “的Neptune 8.0 “Juna “来了

导读Neptune Linux 发行版背后的团队发布了 Neptune 8.0&#xff0c;作为这个基于 Debian 的 GNU/Linux 发行版的重大更新&#xff0c;它围绕最新的 KDE Plasma 桌面环境构建。 Neptune 8.0 被命名为 “Juna”&#xff0c;是在Neptune 7.5 发布 11 个月后发布的&#xff0c;也是…...

GDAL C++ API 学习之路 (4) Spatial Reference System篇 OGRSpatialReference类

class OGRSpatialReference #include <ogr_spatialref.h> OGRSpatialReference 是 GDAL/OGR 库中的一个重要类&#xff0c;用于管理和操作地理空间数据的空间参考系统&#xff08;Spatial Reference System&#xff0c;SRS&#xff09;。它提供了一系列功能&…...

RS232转Profinet网关rs232转网口需要如何设置

大家好&#xff0c;今天我要给大家带来一个很有意思的案例分享。你们猜猜&#xff0c;这回我们要用捷米的一款神奇的网关JM-RS485/232-PN做什么呢&#xff1f;没错&#xff0c;我们要把一台扫码枪设备通过这个RS232转PROFINET网关&#xff0c;接入到一台西门子S7-1200PLC的Prof…...

LaTex的下载与安装超详细windows版

1.LaTex的下载 &#xff08;texlive下载TexStudio下载&#xff09; &#xff08;1&#xff09;texlive下载&#xff1a; 这里清华镜像下载 &#xff08;2&#xff09;TexStudio下载&#xff1a; 点这里下载镜像 可以根据不同的系统选择不同的版本 2 .LaTex的安装 &#…...

MySQL | 存储过程快速入门

文章目录 一、概述1.1 MySQL存储过程和函数的概念1.2 优势和适用场景 二、存储过程基础2.1 存储过程与传统SQL查询的区别2.2 创建和调用存储过程创建存储过程调用存储过程 2.3 参数传递与返回值创建带有输出参数的存储过程调用带有输出参数的存储过程 2.4 流程控制语句IF语句WH…...

C# 图表控件库 ScottPlot

推荐使用ScottPlot原因&#xff1a; 1.图形界面简洁&#xff0c;样式丰富 2.代码较少 3.官方提供多种实例源码&#xff0c;并可以直接通过图形界面查看&#xff0c;便于快速开发 Github源码链接&#xff1a;https://github.com/ScottPlot/ScottPlot 官网WindowFrom Demo实例…...

013 怎么查看自己电脑的wifi密码

方法一&#xff1a;查看当前电脑连接的无线密码 步骤1&#xff1a; 打开windows命令行窗口&#xff0c;输入&#xff1a;ncpa.cpl 快速打开“控制面板”中的“网络连接”&#xff0c;如下图&#xff1a; 步骤2&#xff1a; 右键&#xff0c;打开“状态” 步骤3&#xff1a;…...

深入了解 LoRaWAN® MAC 命令

本文深入探讨了用于 LoRaWAN 网络管理的 MAC 命令。它面向终端设备软件开发人员和使用 LoRa 构建设备的团队经理,这些设备实现了LoRaWAN 链路层规范 v1.0.4。本文帮助您了解不同类型的 MAC 命令、每个命令的用途以及如何解释这些命令。 已经使用LoRaMAC-Node™等软件来处理 MA…...

跨境电商与隐擎fox指纹浏览器:保障安全与效率的完美结合

随着全球化的发展&#xff0c;跨境电商已成为各国贸易的重要组成部分。然而&#xff0c;随之而来的风险和挑战也日益增多&#xff0c;其中之一就是关联浏览器和多开浏览器可能带来的安全隐患。为了确保跨境电商的顺利运营和数据安全&#xff0c;隐擎fox指纹浏览器作为一种防关联…...

【网络编程】五种网络IO模式

对于一次IO访问&#xff08;以read为例&#xff09;&#xff0c;数据会先被拷贝到操作系统内核的缓冲区中&#xff0c;然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说&#xff0c;当一个read操作发生时&#xff0c;会经历两个阶段&#xff1a; 1、等待数据准…...

面试总结-2023版

本文受众主要为&#xff0c;互联网技术研发人员。 技术面试一般三面和HRBP面不太会卡人&#xff0c;主要都是停在了一面和二面上。我这次换工作前期主要是一面通过率比较低&#xff0c;后面主要是二面通过低。 总结影响面试通过的几点因素&#xff1a; 是否真的招人&#xf…...

bigemap在草原行业的应用案例

一.为什么选择Bigemap 1.使用软件一般都用于套坐标以及空间规划图&#xff0c;方便于项目选址和居民建房报建 2.在卫星图上找到用地范围&#xff0c;然后打点&#xff0c;导出点位范围的2000坐标&#xff0c;用于汇报出图 3.CGCS2000坐标系通过矢量转换转成地方坐标系...

DevOps系列文章之 java调用python脚本

在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件&#xff08;推荐&#xff09; 调用python脚本中的函数 简单介绍 官网地址 首页 | (jython.org) Jython项目提供了Java中的Python实现&#xff0c; 为Python提供了…...

PHP异步框架总结

目前主要有: 国产 swoole workerman 国外 framework-x revoltrevolt reactphp amphp async...

vsto excel 可以异步写入值么

在 VSTO (Visual Studio Tools for Office) 中&#xff0c;Excel 可以使用异步方式写入值。异步编程允许您在后台线程中执行耗时的操作&#xff0c;而不会阻塞主线程&#xff0c;从而提高程序的响应性能。 从 .NET 4.5 开始&#xff0c;可以使用异步和 await 关键字来简化异步…...

Show-o2 3D Causal VAE空间:为文本、图像和视频模态提供可扩展解决方案

Show-o2 3D Causal VAE空间&#xff1a;为文本、图像和视频模态提供可扩展解决方案 【免费下载链接】Show-o [ICLR & NeurIPS 2025] Repository for Show-o series, One Single Transformer to Unify Multimodal Understanding and Generation. 项目地址: https://gitcod…...

手把手教你用复旦微FM7Z045芯片在线调试DDR:JTAG与QSPI模式切换避坑指南

复旦微FM7Z045芯片DDR调试实战&#xff1a;模式切换与JTAG连接深度解析 第一次拿到复旦微FM7Z045开发板时&#xff0c;许多工程师都会遇到一个令人困惑的问题——明明按照手册步骤操作&#xff0c;DDR调试却总是失败。这往往不是代码问题&#xff0c;而是模式选择不当导致的。本…...

避坑指南:在Codesys V3.5中用ST处理XML,我踩过的那些‘坑’

Codesys实战&#xff1a;ST语言处理XML文件的7个关键陷阱与解决方案 在工业自动化领域&#xff0c;XML作为数据交换的标准格式&#xff0c;其重要性不言而喻。然而&#xff0c;当我们在Codesys V3.5环境下使用ST语言处理XML文件时&#xff0c;往往会遇到一系列令人头疼的问题。…...

嵌入式Linux下MT7601U无线网卡驱动移植与网络配置实战

1. 项目概述最近在做一个基于Linux 3.5内核的嵌入式项目&#xff0c;需要让开发板通过USB接口连接无线网络。手头正好有几个闲置的360随身WiFi&#xff0c;查了一下&#xff0c;它的核心芯片是联发科&#xff08;MediaTek&#xff09;的MT7601U&#xff0c;这是一款非常经典的U…...

别再轮询了!Qt QSerialPort高效读取数据的正确姿势:理解缓冲区与readyRead触发机制

别再轮询了&#xff01;Qt QSerialPort高效读取数据的正确姿势&#xff1a;理解缓冲区与readyRead触发机制 在嵌入式开发和硬件通信领域&#xff0c;串口通信作为最基础的通信方式之一&#xff0c;其稳定性和效率直接影响整个系统的性能表现。许多开发者在使用Qt的QSerialPort模…...

Cadence软件安装后找不到图标?别慌,手把手教你从开始菜单启动Capture和Allegro

Cadence软件安装后找不到图标&#xff1f;别慌&#xff0c;手把手教你从开始菜单启动Capture和Allegro 刚完成Cadence软件安装的兴奋感&#xff0c;往往会被桌面上空空如也的现状瞬间浇灭。这就像拿到一台新电脑却发现没有电源键——明明安装了专业EDA工具&#xff0c;却连入口…...

精密运放ADA4091-2驱动能力不够?试试‘复合放大器’这招,带宽和带载能力都翻倍

精密运放驱动能力不足的终极解决方案&#xff1a;复合放大器架构深度解析 在精密信号链设计中&#xff0c;工程师们常常面临一个两难选择&#xff1a;要么选择ADA4091-2这类具有超低噪声和卓越直流性能的精密运放&#xff0c;但牺牲驱动能力&#xff1b;要么选用大电流运放&…...

独角数卡支付系统:如何构建高可用的自动售货支付解决方案

独角数卡支付系统&#xff1a;如何构建高可用的自动售货支付解决方案 【免费下载链接】dujiaoka &#x1f984;独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速&#xff01;&#x1f680;&#x1f680;&#x1f389;&#x1f389; 项目地址: https://g…...

Hertz.dev多模态应用探索:结合WebRTC的浏览器端音频处理

Hertz.dev多模态应用探索&#xff1a;结合WebRTC的浏览器端音频处理 【免费下载链接】hertz-dev first base model for full-duplex conversational audio 项目地址: https://gitcode.com/gh_mirrors/he/hertz-dev Hertz-dev是一款开源的全双工对话音频基础模型&#xf…...

Augmentoolkit事实数据生成管道:打造精准问答AI的终极方法

Augmentoolkit事实数据生成管道&#xff1a;打造精准问答AI的终极方法 【免费下载链接】augmentoolkit Create Custom LLMs 项目地址: https://gitcode.com/gh_mirrors/au/augmentoolkit 想要创建专属的领域专家AI吗&#xff1f;Augmentoolkit事实数据生成管道为您提供了…...