jvm学习第1day jvm简介,栈溢出、堆溢出

jvm学习第1day jvm简介,栈溢出、堆溢出

jvm简介

jvm 是编译后的字节码文件运行的环境, 因此各个平台有了jvm可以运行java.class文件,这是Java跨平台的原因。

jre jvm + 基础类库(日期类,集合类等) java run environment

jdk jre + 编译工具 (Java Development Kit Java开发工具包)

javase jdk + Idea 有了java开发工具包jdk ,再需要一个编写代码的工具IDEA ,就可以进行java编码

javaee javase + 应用服务器(例如Tomcat)

栈线程安全

程序计数器:很多线程,每个线程都要记录下一个指令的地址,因此是私有的。

栈 :一个方法调用就是一个线程的开始,一个线程用的内存空间就是栈,这个方法可以嵌套方法。 方法中包含:参数,返回值,变量,都是需要占用内存的。

活动栈帧:正在执行的栈帧。(方法)

如果一个栈是1m,整个内存是500m,那么最多500个线程,如果一个栈2m,最多250个线程,并不是说栈越大越好,栈大了,只是可以递归的次数多了。

共享的需要考虑线程安全,私有的不需要考虑。

栈溢出

1.栈帧过多导致栈内存溢出 例如递归终止出现错误

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

线程运行诊断

发生死锁了:a要b b要a 但是a,b都已经被锁定了。

程序计数器 、虚拟机栈(只要不离开栈就是私有的)、本地方法栈;堆、方法区共享。

堆内存中的对象不被调用就会垃圾回收

堆溢出

java堆空间不足导致堆溢出。

方法区

方法区内存溢出

方法区是概念 实现有两个:元空间 永久代

常量池和运行时常量池

指令 去常量区中找的什么类下的方法等功能。

相关推荐
wuminyu6 小时前
深入剖析 Panama Off-heap 的性能损耗与开销
java·linux·c语言·jvm·c++
uoKent10 小时前
c++中new和malloc的区别
java·jvm·c++
~木雨11 小时前
String 底层原理与常量池全解析:byte []+coder、intern 陷阱、substring 内存泄漏,一篇讲透
java·jvm·内存优化·string·字符串常量池
cfm_291412 小时前
ThreadLocal 内存泄漏
java·jvm
liangbo714 小时前
JVM规范第 6 章:Java 虚拟机指令集
java·jvm
2501_937860941 天前
Java多线程初阶(下)—— synchronized、volatile、wait/notify与经典并发工具
java·开发语言·jvm
二十雨辰1 天前
[Java]-JVM面试题
java·开发语言·jvm
IT_Octopus1 天前
G1 与 GC 日志入门课程(以本次离线菜单 Full GC 事故为教材)
java·jvm
疯狂打码的少年2 天前
【数据库技术】关系代数连接运算(等值连接/自然连接/外连接)
jvm·数据库·笔记·oracle
ly76892 天前
Java 21 到 Java 26 新特性详解:虚拟线程、模式匹配、结构化并发、HTTP/3 与 AOT
java·jvm