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堆空间不足导致堆溢出。

方法区

方法区内存溢出

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

常量池和运行时常量池

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

相关推荐
NEFU AB-IN2 分钟前
Prompt Gen Desktop 管理和迭代你的 Prompt!
java·jvm·prompt
唐古乌梁海5 小时前
【Java】JVM 内存区域划分
java·开发语言·jvm
众俗6 小时前
JVM整理
jvm
echoyu.6 小时前
java源代码、字节码、jvm、jit、aot的关系
java·开发语言·jvm·八股
代码栈上的思考21 小时前
JVM中内存管理的策略
java·jvm
thginWalker1 天前
深入浅出 Java 虚拟机之进阶部分
jvm
沐浴露z1 天前
【JVM】详解 线程与协程
java·jvm
thginWalker1 天前
深入浅出 Java 虚拟机之实战部分
jvm
程序员卷卷狗2 天前
JVM 调优实战:从线上问题复盘到精细化内存治理
java·开发语言·jvm
Sincerelyplz3 天前
【JDK新特性】分代ZGC到底做了哪些优化?
java·jvm·后端