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

Java 内存结构解密

程序计数器

物理上被称为寄存器,存取速度很快。

作用        

        记住下一条jvm指令的执行地址。

特点

        线程私有,和线程一块出生。

        不存在内存溢出。

虚拟机栈

        每个线程运行时所需要的内存,称为虚拟机栈。

        每个栈由多个栈帧组成,对应着每次方法调用时所占用的内存。

        每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法。(栈顶对应的就是活动栈帧)

思考

栈内存分配越大越好吗?

        不是,栈内存分配的很大的话,线程数就会减少,因为物理分配的内存是固定的。

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

        不会涉及,因为出栈后会被自动弹出,轮不到垃圾回收机制来处理。垃圾回收机制只回收堆里面的无用对象。

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

        如果方法内的局部变量没有逃离方法的作用访问,它的线程是安全的;

        如果是局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全。

栈内存溢出

        栈帧过多导致栈内存溢出;

        栈帧过大导致栈内存溢出。

线程运行诊断

        CPU占用过多

                在Linux下,用“top”命令定位哪个进程对CPU的占用过高

                ps H -eo pid,tid,%cpu | grep 进程id        (进一步定位是哪个线程引起的cpu占用过高)

                jstack进程id

                        可以根据id找到有问题的线程,进一步定位到问题代码的源代码行号。

本地方法栈

        

        因为操作系统使用c/c++写的,java并不能直接和操作系统打交道,就需要本地方法栈,比如Object类的一些方法。

 

像这种以native返回值类型说明的就是。 

        通过new关键字,创建对象都会使用堆内存

特点

        线程共享的,堆中对象都需要考虑线程安全的问题。

        有垃圾回收机制。

堆内存溢出

        含有对象的循环没有终止条件等……

堆内存诊断

        JPS工具

                查看当前系统中有哪些Java进程

        JMAP工具

                查看堆内存占用情况

        JCONSOLE工具

                图形界面的,多功能的监测工具,可以连续监测。

例如,垃圾回收后内存占用依然很高的情况下就可以采用这些工具查看。

方法区

        组成

                

 方法区内存溢出

        JDK1.8以前会导致永久代内存溢出

        java.lang.OutofMemoryError: PermGen space

        JDK1.8之后会导致元空间内存溢出

        java.lang.OutofMemoryError: Metaspace

场景 spring中动态代理生成对象时有可能,mybatis。

运行时常量池

        常量池

                就是一张表,虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、自面量等信息。

        运行时常量池

                常量池是 *.class 文件中的,当该类被加载,它的常量池信息就会放入运行时常量池,并把里面的符号地址变为真实地址。

相关文章:

Java 内存结构解密

程序计数器 物理上被称为寄存器,存取速度很快。 作用 记住下一条jvm指令的执行地址。 特点 线程私有,和线程一块出生。 不存在内存溢出。 虚拟机栈 每个线程运行时所需要的内存,称为虚拟机栈。 每个栈由多个栈帧组成,…...

ROS小车研究笔记2/11/2023:使用ssh远程登录小车

1 SSH简介: SSH全称Secure Shell,是一种建立在应用层的安全网络协议。其安全性又非对称加密(RSA)实现 对称加密:使用同一密钥对信息进行加密和解密,但是一旦该密钥被窃取就会威胁通信安全 非对称加密:使用公钥和私钥。…...

koa ts kick off 搭建项目的基本架子

koa ts kick off 使用ts开发koa项目的基本架子,便于平时随手调研一些技术 项目结构 ├── src │ ├── controller //controller层 │ ├── service //service层 │ ├── routes.ts //路由 │ └── index.ts //项目入…...

h2database源码解析-查询优化器原理

目录一、成本计算规则二、单表查询三、多表关联查询一、成本计算规则 h2的查询优化器基于成本的,因此在执行查询前,会基于成本计算使用哪个索引,如果涉及多表关联,还会计算不同表关联顺序的成本,最终基于最小成本得出…...

2月11日,30秒知全网,精选7个热点

///国产邮轮首制船将于今年5月底出坞,年底交付 浦东新区近期将发布相关政策支持包括外高桥造船在内的船舶产业发展 ///首批个人养老金理财产品名单发布:3家机构7只产品 中国理财网发布的信息显示,首批个人养老金理财产品名单发布&#xff0…...

vue组件的构成 <template> <script> <style>节点的使用 <

1.vue组件组成结构 每个.vue组件都由3部分构成,分别是: template ->组件的模板结构script ->组件的JavaScript行为style ->组件的样式 其中,每个组件中必须包含template模板结构,而script行为和style样式是可选的组成部分。 2.组…...

windows + vscode + rust

1 安装VSCODE略2 安装rust插件1、说明:第4步本人是一个一个点击状态。上图禁用按钮在没装之前是显示“安装”按钮,应该点击“安装”也可以。2、还需要安装C插件,搜索C即可,装微软的3 创建rust工程由于初次使用,不知道目…...

二十九、异常处理

目录 ①前言: ②常见的运行时异常 ③常见的编译时异常 ④异常的处理机制 ⑤自定义异常 ①前言: 1.什么是异常? 异常是程序在“编译”或者“执行”的过程中可能出现的问题,注意:语法错误不算在异常体系中。 比如: 数据索引越界异常&…...

RTOS之二环境搭建初识RTOS

参考:https://blog.csdn.net/kouxi1/article/details/123650688视频:https://www.bilibili.com/video/BV1b14y1c783/RTOS本质就是切换线程栈,栈换了环境就换了,一个重要的结构tcb(linux叫PCB或thread_info)…...

【Java】 JAVA Notes

JAVA语言帮助笔记Java的安装与JDKJava命名规范JAVA的数据类型自动类型转换强制类型转换JAVA的运算符取余运算结果的符号逻辑运算的短路运算三元运算符运算符优先级JAVA的流程控制分支结构JAVA类Scanner类Math 类random方法获取随机数Java的安装与JDK JDK安装网站:h…...

Java笔记-volatile和AtomicInteger

目录1. volatile1.1.什么是volatile1.2.JMM-Java内存模型2 验证volatile的特性2.1 可见性2.2.验证volatile不保证原子性2.3 volatile实现禁止指令重排序3.使用AtomicInteger解决volatile的不能实现原子性的问题3.2 AtomicInteger的方法说明:3.3 CAS3.4 应用1. volat…...

[标准库]STM32F103R8T6 高级定时器--PWM输出和带死区互补PWM输出

前言 STM32F103系列的MCU,相比普通的51单片机,在输出硬件PWM这个功能上要强不少,两者实现的方式都类似,都是通过一个定时器来启用硬件PWM输出,不过在输出PWM通道的数量上,32F103要强上不少。仅通过一个高级…...

Camtasia2023最新版电脑视频录屏记录编辑软件

在Mac或Wind上有各种可用的视频记录和编辑软件,其中Camtasia被称为视频记录器和视频编辑器。录屏软件Camtasia2023到底有什么特色功能?本文将帮助您选择理想的选择来开始视频捕获,创建和编辑。Camtasia2023是Mac/win平台上一款使用非常简单的…...

管理用户安全性

每个数据库用户帐户都包括以下项:唯一的用户名验证方法 默认表空间临时表空间用户概要文件初始使用者组帐户状态验证用户口令验证、外部验证、全局验证管理员验证操作系统安全性:• DBA 必须具有创建或删除文件的操作系统权限。• 普通数据库用户不应具有…...

分享113个JS菜单导航,总有一款适合您

分享113个JS菜单导航,总有一款适合您 113个JS菜单导航下载链接:https://pan.baidu.com/s/1d4nnh-UAxNnSp9kfMBmPAw?pwdcw23 提取码:cw23 Python采集代码下载链接:https://wwgn.lanzoul.com/iKGwb0kye3wj base_url "http…...

RuoYi-Cloud 部署

RuoYi-Cloud部署 1. 下载 点击右侧链接可以进入gitee的源码下载地址: 偌依微服务源码gitee下载地址 2. 数据库部署 依据如下步骤创建系统所需数据环境,脚本执行没有先后次序要求: 在Mysql 中创建 ry-cloud 主数据库,并执行 …...

DockerFile文件详解

一、DockerFile文件说明1、概述 Dockerfile是用来构建Docker镜像的文本文件,文本内容包含了一条条构建镜像所需的指令、参数和说明。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。即:Dockerfile仅…...

Java程序运行机制

Java语言既具有编译型语言的特征,又具有解释型语言的特征,Java程序要经过先编译后解释两个阶段。高级语言的运行机制📍编译型语言使用专门的编译器,针对特定的平台(移植性差),将高级语言的源代码…...

LeetCode刷题------字符串

目录 LeetCode:344.反转字符串 LeetCode:541. 反转字符串II LeetCode:剑指Offer 05.替换空格 LeetCode:151.翻转字符串里的单词 LeetCode:剑指Offer58-II.左旋转字符串 LeetCode:28. 实现 strStr() …...

区块链技术与应用2——BTC-数据结构

文章目录比特币中的数据结构1. 区块链(block chain)2. 默克尔树(Merkle tree)3.哈希指针的问题比特币中的数据结构 1. 区块链(block chain) 哈希指针: (1)保存数值的位置…...

Kubernetes网络沙箱BotBox:为AI Agent提供零改造的密钥安全与访问控制

1. 项目概述:为AI Agent打造坚不可摧的网络沙箱如果你正在Kubernetes里跑AI Agent,比如让Clawbot、Moltbot或者OpenClaw这类自主代码生成工具去联网干活,心里是不是总有点不踏实?我猜你肯定担心过这几个问题:我给的API…...

API中转站稳定性怎么判断?中小企业选平台别只看SLA数字

API中转站稳定性怎么判断?中小企业选平台别只看SLA数字 摘要 :选择Claude API中转站时,稳定性是核心考量。但"稳定"对不同用户含义不同,本文从不同用户视角分析如何评估API中转站的稳定性。 中转站稳定吗 稳定是相对的&…...

Docker Compose 镜像检测脚本(支持自动扫描 + 手动输入 YAML)

在日常运维中,经常会遇到这样一个问题: docker-compose 文件里定义了很多镜像,但本地是否已经存在不清楚 如果一个个 docker pull 或 docker images 去对比,会非常低效。 因此我们可以写一个脚本,自动解析 docker-com…...

基于Helm与Kubernetes的以太坊节点自动化部署与运维实战

1. 项目概述:当以太坊遇见Kubernetes如果你和我一样,在区块链基础设施领域摸爬滚打多年,从早期手动编译客户端、配置systemd服务,到后来用Docker Compose编排节点,每一步都伴随着大量的重复劳动和运维痛点。当节点数量…...

Roast:颠覆AI助手模式,打造苏格拉底式思维拷问引擎

1. 项目概述:当AI开始“拷问”你如果你用过市面上那些主流的AI助手,不管是ChatGPT、Claude还是DeepSeek,你大概率有过这样的体验:你抛出一个想法,它总能给你一堆“哇,这个想法太棒了!”、“很有…...

【DeepSeek开发者垂直搜索实战指南】:3大行业落地案例+5个避坑要点,限时公开内部调优参数

更多请点击: https://intelliparadigm.com 第一章:DeepSeek开发者垂直搜索应用案例全景概览 DeepSeek系列大模型凭借其开源、高性能与强推理能力,正被广泛集成至开发者垂直搜索场景中——从代码片段检索、API文档语义查找,到私有…...

人脸模糊实战指南:YOLOv8+SAM三重模糊工业级方案

1. 项目概述:为什么一张脸的模糊处理,比你想象中更难也更重要我做图像隐私处理相关项目快八年了,从最早用Photoshop手动框选、拖拽高斯模糊图层,到后来写脚本调OpenCV的Haar级联检测器,再到如今用YOLOv8SAM组合做像素级…...

终极指南:Python通达信数据接口MOOTDX完整使用教程

终极指南:Python通达信数据接口MOOTDX完整使用教程 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx MOOTDX是一款基于Python的高效通达信数据接口封装,专为量化投资和金融数…...

手把手教你用云GPU(极链AI云)零成本复现SlowFast视频动作识别,附完整配置文件与避坑指南

零成本云端复现SlowFast视频动作识别全攻略:极链AI云实战与参数精解 在计算机视觉领域,视频理解一直是个充满挑战的方向。不同于静态图像,视频数据包含丰富的时序信息,这对模型架构设计提出了更高要求。SlowFast作为Facebook AI R…...

Taotoken 官方价折扣与活动价助力个人开发者降低创新门槛

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken 官方价折扣与活动价助力个人开发者降低创新门槛 对于个人开发者和学生而言,探索大模型应用的最大挑战之一往往…...