当前位置:网站首页>JVM简单入门-02
JVM简单入门-02
2022-06-23 10:07:00 【cfcoolya】
一.JVM体系结构图
在整个JVM学习过程中,这张图要深深记住,这样才不会迷失方向

二.Native方法
在多线程Thread的start方法源码中,有一个方法【private native void start0()】,其中有一个关键字native。
- 凡是带了native关键字的,说明Java的作用范围达不到了,回去调用底层C语言的库。
- 会进入本地方法栈,调用本地方法接口JNI(Java native interface)

历史原因:Java诞生的时候是C、C++横行的时候,想要立足,必须调用C、C++的程序,于是就在内存中专门开辟了一块区域标记为native的代码,它的具体做法是在Navitive Method Stack中登记navtive方法,在执行引擎的时候加载Native Libraries。
三.方法区
方法区(Method Area)是被所有线程共享,所有定义的方法的信息都保存在该区域。
静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存在方法中,但实例变量存在堆内存中和方法区无关(static、final、class、常量池)
四.栈
- 用一种通俗的语言来解释就是:喝多了吐就是栈,吃多了拉就是队列。
- 栈的存储速度比堆要快,仅次于寄存器,栈数据可以共享。
- 栈不存在垃圾回收问题,只要线程一旦结束,该栈就Over,生命周期跟线程一致,是线程私有的。
五.堆(sun-hotspot)
一个JVM只有一个堆内存,堆内存的大小是可以调节的;类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息。
5.1堆
- 新生区 Young/New
- 养老区 Tenure/Old
- 永久区 Perm

GC垃圾回收主要在新生区和养老区,又分为轻GC和重GC,如果内存不够,或者存在死循环,就会导致java.lang.OutOfMemoryError:Java heap space.
5.2新生区
新生区又分为两部分:伊甸区(Eden)和幸存区(Survivor Space),所有类都是在Eden区被new出来的。
当Eden的空间用完时,程序又要创建对象,JVM的垃圾回收器将对Eden区进行垃圾回收(Minor GC),类似操作0区满了,移动到1区,养老区。若养老区执行了Full GC后依然无法进行对象的保存,就会产生OOM异常“Out of MemoryError”。
若出现OOM,说明Java虚拟机的堆内存不够,原因如下:
- Java虚拟机的堆内存设置不够,可以通过参数 -Xms(初始值大小),-Xmx(最大大小)来调整
- 代码中创建了大量的对象,并且长时间不能被垃圾收集器收集或者死循环
5.3永久区
- 用于存放JDK自身所携带的Class,Interface的元数据,存储的是运行环境必须的类信息
- 此区域的数据是不会被垃圾回收器收掉的,关闭JVM才会释放此区域所占用的内存
- Java.lang.OutOfMemoryError:PerGen space说明Java虚拟机对永久代Perm内存设置不够
- JDK1.8及之后无永久代,常量池1.8在元空间
5.4堆内存调优
-Xms:设置初始分配大小,默认物理内存的1/64
-Xmx:最大分配内存,默认物理内存的1/4
-XX:PrintGCDetails:输出详细的GC处理日志
六.方法区+堆+栈交互

图解:https://blog.csdn.net/thera_qing/article/details/110544168
学习来自:B站-狂神说
边栏推荐
猜你喜欢

文献综述怎么写 ,一直没头绪写不出来怎么办?

SQL create a new field based on the comparison date

Bugs encountered in Oracle

Build the information and innovation industry ecology, and make mobile cloud based on the whole stack of independent innovation

Comic | code review is driving me crazy!

Unity技术手册 - 生命周期内速度限制(Limit Velocity Over Lifetime)子模块和速度继承(Inherit Velocity)子模块

NFTs、Web3和元宇宙对数字营销意味着什么?

Go language JSON processing

陆奇首次出手投资量子计算

数值计算方法
随机推荐
Unity技术手册 - 生命周期内速度限制(Limit Velocity Over Lifetime)子模块和速度继承(Inherit Velocity)子模块
Go 单元测试
炫酷相册代码,祝对象生日快乐!
高性能算力中心 — RDMA — 实现技术
Unity技术手册 - 生命周期LifetimebyEmitterSpeed-周期内颜色ColorOverLifetime-速度颜色ColorBySpeed
NFTs、Web3和元宇宙对数字营销意味着什么?
J. Med. Chem. | Release: a new drug design model for deep learning based on target structure
Year end answer sheet! Tencent cloud intelligent comprehensive strength ranks first in China!
个人博客系统毕业设计开题报告
Several practical software sharing
2021-04-16 array
Gstore weekly gstore source code analysis (IV): black and white list configuration analysis of security mechanism
thymeleaf中如何给onclick事件传值的方法
JS教程之 什么是 JSX?为什么我们需要它?
【第23天】给定一个长度为 n 的数组,将元素 X 插入数组指定的位置 | 数组插入操作4
2021-04-12 the first implementation of linked list!!!
Unity技术手册 - 形状(Shape)子模块 - Sprite、SpriteRenderer及生命周期内速度(Velocity over Lifetime)
高性能算力中心 — NVMe/NVMe-oF — NVMe-oF Overview
2021-05-10方法重写多态注意事项
SQL writing problem to calculate the ring ratio of the current month and the previous month