JVM学习笔记之JVM运行时数据区

JVM运行时数据区可以用下图表示

概述:其中虚线框内(程序计数器、Java虚拟机栈、本地方法栈)是线程私有的内存空间,只存在于线程的生命周期内,线程结束之后就会消失,因此不需要对这三个区域进行垃圾回收。
堆和方法区是线程共享的数据区,垃圾收集主要是针对堆和方法区进行。

在这里插入图片描述

程序计数器

可以看作是当前线程执行的字节码的行号指示器,记录正在执行的虚拟机字节码指令的地址(如果正在执行本地方法,则记录值为空)

Java虚拟机栈

每个Java方法执行的同时会创建一个栈帧存放到Java虚拟机栈中,用于存储局部变量、操作数栈、动态链接、方法出口等信息。从方法调用直至执行完成的过程,对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。在这里插入图片描述
可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小,在 JDK 1.4 中默认为 256K,而在 JDK 1.5+ 默认为 1M:

java -Xss2M HackTheJava

该区域可能抛出以下异常:

  • 当线程请求的栈深度超过最大值,会抛出 StackOverflowError 异常;
  • 栈进行动态扩展时如果无法申请到足够内存,会抛出 OutOfMemoryError 异常。

本地方法栈

本地方法栈与虚拟机栈类似,它们之间的区别是本地方法栈为本地方法服务。
本地方法一般用非Java语言(C、C++等)编写,并且编译为基于本机硬件和操作系统的程序,对待这些方法需要特别处理。但也有一些虚拟机吧本地方法栈合并到Java虚拟机栈中(如Sun HotSpot,Sun公司的一个HotSpot实现)
在这里插入图片描述

所有对象(包括String)都在这里分配内存,是垃圾收集的主要区域(“GC 堆”)。

现代的垃圾收集器基本都是采用分代收集算法,其主要的思想是针对不同类型的对象采取不同的垃圾回收算法。可以将堆分成两块:

新生代(Young Generation)
老年代(Old Generation)
堆不需要连续内存,并且可以动态增加其内存,增加失败会抛出 OutOfMemoryError 异常。

可以通过 -Xms 和 -Xmx 这两个虚拟机参数来指定一个程序的堆内存大小,第一个参数设置初始值,第二个参数设置最大值。

java -Xms1M -Xmx2M HackTheJava

方法区

用于存放已被加载的类信息、常量、静态变量、即时编译(JIT)后的代码等数据。
和堆一样不需要连续内存,并且可以动态拓展,动态拓展失败一样会抛出OutOfMemoryError异常。
对于这块区域进行垃圾回收的主要目标是对常量池的回收和对垒的卸载,但是一般实现比较困难。
HotSpot虚拟机把它当作永久代进行垃圾回收,但是很难确定永久代的大小,因为他受到很多因素的影响,并且每次Full GC之后永久代的大小都会改变,从JDK1.8开始,一处永久代,并把方法区移至元空间,它位于本地内存中,而不是虚拟机内存中。
方法区是一个JVM规范,永久代与原空间都是其一种实现方式。在JDK1.8之后,原来永久代的数据被分到了堆和元空间中,元空间存储类的的元信息静态变量和常量池放入堆中。

方法区中的常量池

运行时常量池是方法区的一部分。

Class 文件中的常量池(编译器生成的字面量和符号引用)会在类加载后被放入这个区域。

除了在编译期生成的常量,还允许动态生成,例如 String 类的 intern()。

直接内存

在 JDK 1.4 中新引入了 NIO 类,它可以使用 Native 函数库直接分配堆外内存,然后通过 Java 堆里的 DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在堆内存和堆外内存来回拷贝数据。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值