JAVA笔记六:JVM内存和gc

本文详细解析JVM内存布局,涵盖方法区、堆区、虚拟机栈、本地方法栈和程序计数器等关键区域的功能与作用。揭示类信息、对象实例、线程状态的存储机制,以及垃圾回收的主要工作区。

JVM是一份本地化的程序(可执行的文件),程序运行起来成为进程。java程序是跑在JVM上的,严格来讲,是跑在JVM实例(JVM跑起来的进程)上,二者合起来称之为一个JAVA进程。各个JVM实例之间是相互隔离的。

Jvm内存
• 方法区(Method Area):全局共享,持久代。方法区存放了要加载的类的信息(如类名、修饰符等)、静态变量、构造函数、final定义的常量、类中的成员变量和方法等信息。运行时常量池(Runtime Constant Pool)是方法区的一部分,用于存储编译器生成的常量和引用(比如Integer的int数字-128~127,还有String,但是不包括使用new进行初始化的情况,此时需放在堆中)。一般来说,常量的分配在编译时就能确定,但也也可以存储在运行时期产生的常量(比如String类的intern()方法能强制字符串入常量区)。
• 堆区(Heap):全局共享,GC重点工作区。用于存放对象实例及数组,所有new出来的对象都存储在该区域。
• 虚拟机栈(VM Stack):线程独占,生命周期和线程相同,内存大小在编译时即固定。栈帧用于存储局部变量表(只包含基本数据类型和对象的引用,对象本身还是存在堆中)、动态链接、操作数和方法出口等信息,当方法被调用时,栈帧入栈,当方法调用结束时,栈帧出栈。所以无限的递归方法会导致栈溢出。
• 本地方法栈(Native Method Stack):线程独占。用于执行native方法,运行机制同虚拟机栈他们的运行机制一致。
• 程序计数器(Program Counter Register):存储当前线程执行的字节码(.class文件)行号,由CPU自行控制,不会内存溢出。
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值