jvm16-40回

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

哔哩哔哩:添加链接描述


一、本地方法栈

本地方法运行的内存空间

二、堆

new出的对象就是堆

堆内存是共享的,要考虑线程安全

堆有GC垃圾回收,一旦new出的对象不再使用,就会进行垃圾回收

堆的溢出:new出的对象一直没有销毁,并再添加 , OutofMemeryError

jps查看有哪些进程

jmap -heap 18756查看堆内存的使用情况,Eden 是新创建内存区域大小

jconsole和jvisualVM都是图形化界面,更直观易懂,无需下载

三、运行时常量池

常量池:提供给解释器的执行命令,包含运行的类

运行时常量池:当类被加载,常量池会被加入运行时常量池,并把符号地址变成真实的地址

方法区:存储跟类相关的东西,.class 、classLoder 、常量池

内存溢出:1.8后会导致元空间溢出,1.8之前会导致永久代溢出

内存溢出:spring和mybatis的动态字节码技术使用了cglib中的classwriter,继承自classvistor,会创建很多类,所以有时候内存溢出可能是框架选择的原因。

四、串池 StringTable

a="a"

b="b"

c=a+b

d="a"+"b"

c!=d 因为c是new StringBuffer.append("a").append("b")是堆中的

d是编译时优化,认为是串池中的"ab",即=="ab"

1.6 a.intern 如果串池中不存在,则会复制一份放入串池

1.8 a.intern 如果串池中不存在,则会直接放入串池

返回值都是串池中的,如果是new出来的,返回值则是堆中的

1.8后将stringtable移入堆中(原来在方法区)

jvm调优:桶的个数越多,hash越分散,查询速度就越快。例如,如果常量值比较多,可以调大Stringtable的大小,速度会快很多

jvm调优:当存储常量可能很多重复时,可以用string.intern来节省存储空间


总结

相关推荐
码匠许师傅10 分钟前
【C++ 面试真题】聊聊 C++ 的虚函数和多态
java·c++·面试
chuan.bai37 分钟前
Java RAG 实战(第 8 篇):Spring Boot RAG 查询 API
java·spring boot·贪心算法
FlyWIHTSKY38 分钟前
idea中集成claude功能
java·ide·人工智能·intellij-idea·cloudera
Java成神之路-43 分钟前
Spring AI 统一结构化返回:ChatModel / ChatClient 两种实现方式
java·springaialibaba
Mr. zhihao1 小时前
深度解析:为什么Java序列化需要搭配ByteArrayOutputStream?IO装饰器模式的精妙设计
java·开发语言·装饰器模式
存在morning1 小时前
【Python 开发实践 一】Python vs Go vs Java 三门语言对比
java·python·golang
vx-程序开发1 小时前
springboot旅游推介平台---附源码24175
java·spring boot·python·spring cloud·eclipse·django·idea
艾莉丝努力练剑1 小时前
【QT:解决问题】Qt5Core.dll:无法定位程序输入点
java·开发语言·qt·学习·面试
小蒜学长2 小时前
“喵汪联盟”宠物领养系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·宠物
程序员黑豆2 小时前
Java字符串常量池完全指南:原理、intern()方法与性能优化最佳实践
java·前端·ai编程