Java基本概念6-JVM2

(如上图)各个区域的功能:

·方法区:方法区是所有线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。静态方法和变量会提前分配空间,不需要再次分配(非静态方法需要在堆区分配空间)

·栈区:栈区是线程私有的内存区域,每个线程创建时都会创建一个栈区。正在执行进栈,出栈代表执行完毕(以java代码里的"}"为结束标志)

·堆区:堆区是JVM中最大的一块内存区域,也是被所有线程共享的。堆区主要用于存储对象实例和数组。几乎所有的对象实例都是在堆区分配的。

·程序计数器:记录方法的开始与结束,变量的有效和实效。程序计数器是一块较小的内存区域,也是线程私有的。它的作用是存储指向下一条指令的地址,即当前线程执行的字节码的行号指示器。

·本地方法栈:Java事实上无法直接被OS编辑,需要借助C和C++,并通过C和C++进一步解析在硬件上实现。本地方法栈与栈区类似,也是线程私有的。它用于存储本地方法(如C或C++编写的方法)的调用状态,包括局部变量和方法调用信息。

字符串的数值一般储存在堆区的字符串常量池,但是用new在堆区申请独立的空间。

在Java"new"后的堆区(一字宽可能是32比特或64比特,类型信息和锁信息所有都有)(下图左面是一个自定义类,右面是堆区具体如何在new后建立这个新空间):

局部变量在花括号结束即被回收

线程由一个一个方法组成,依托栈结构完成一系列方法调用

进程由一个一个线程组成

实例1

注意:new后的String不存放在字符串常量池里

实例2

相关推荐
蛋蛋的就会顺顺的8 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
需要8269 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡9 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
死磕音视频9 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
伯恩bourne11 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_11 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs11 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲12 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog12 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
用户212968352616812 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm