JVM-满老师

JVM

前言


JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机

程序计数器,栈,

程序计数器 :作用,是记住下一条jvm指令的执行地址

线程私有的,不会存在内存溢出

虚拟机栈:

不需要垃圾回收

栈内存分配不是越大越好,越大,能分配的线程数会变少

活动栈帧,栈顶的那个栈帧(正在执行的那个方法)

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

比如递归方法反复调用自己,没有临界条件,只有一直入栈,没有出栈释放

栈帧过大导致栈内存溢出

本地方法栈:

本地方法,native method,不是有Java语言编写的代码,由C、C++编写的,本地方法调用的时候就放在本地方法栈

堆,方法区:

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

特点

它是线程共享的,堆中对象都需要考虑线程安全的问题
有垃圾回收机制

堆内存溢出

大量对象占据了堆空间,这些对象都持有强引用导致无法回收

解决办法

  • 使用Xmx参数指定一个更大的堆空间;
  • 由于堆空间不可能无限增长,分析找到大量占用对空间的对象,在应用程序上做出优化;

还有jvirsualvm

方法区

方法区(Method Area)被所有线程共享,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

运行时常量池

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

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

StringTable:

  • 常量池中的字符串仅是符号,第一次用到时才变为对象,用串池Stringtable(串池)的机制,来避免重复创建字符串对象
  • 字符串变量拼接的原理是 StringBuilder视频说明:s1+s2
  • 符串常量拼接的原理是编译期优化{"a"+"b"}

p34开始

相关推荐
外收内放4 分钟前
FastAPI猜字谜实战(5):会话管理
开发语言·python·学习·fastapi
Ai-_Man4 分钟前
Microsoft Copilot对话数据怎么导入到另外一个Microsoft Copilot账号里去?AI导出鸭
开发语言·javascript·人工智能·microsoft·chatgpt·ecmascript·copilot
H.莓飛10 分钟前
【数据结构】归并与外排序
linux·服务器·c语言·开发语言·数据结构·visual studio
文丑颜不良啊10 分钟前
LeetCode851~875题目解析
java·leetcode
技术老孙12 分钟前
给 Agent 装上对话框 —— AgentScope-Java 接入 Spring Boot 与 SSE 流式实战
java·开发语言·spring boot
指剑1 小时前
亚麻云之EC2——安全组与密钥对:SSH 端口怎么开才安全,Permission denied (publickey) 和连接超时排查
java·安全·ssh
星夜离尘568 小时前
MATLAB 工程实验:不等间隔流量积分,先把缺口与覆盖率说清楚
开发语言·matlab·时间戳·数据质量·数值积分
_Evan_Yao8 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
Ai-_Man9 小时前
Meta Muse还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·c#·1024程序员节
梓豪csd9 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节