java架构师培训- JVM内存区的划分

69 篇文章 0 订阅
43 篇文章 0 订阅

通常,JVM内存区域可以分为以下几个方面。其中,有些区域是基于线程的,而有些区域是整个JVM进程所独有的。

java架构师培训

(1)程序计数器。在JVM规范中,每个线程都有自己的程序计数器,并且线程只有一个随时执行的方法,这就是所谓的当前方法。程序计数器存储当前线程正在执行的Java方法的JVM指令地址;或者,如果正在执行本地方法,则它是未指定的值。

(2)Java虚拟机,早期也叫Java栈。创建每个线程时,将创建一个虚拟机堆栈,该堆栈将保存一堆框架,对应于Java方法调用。在谈到程序计数器时,提到了当前的方法。同样,在某个时间点上,将只有一个活动堆栈帧,通常称为当前帧,而该方法所在的类称为当前类。如果在此方法中调用了其他方法,则将创建相应的新堆栈帧并成为新的当前帧,直到返回结果或执行结束为止。JVM在Java堆栈上只有两个直接操作,即推入和弹出堆栈框架。堆栈框架存储局部变量表,操作数堆栈,动态链接以及方法的正常退出或异常退出的定义。

(3)堆,它是Java内存管理的核心区域,用于放置Java对象实例。几乎所有创建的Java对象实例都直接分配在堆上。堆由所有线程共享。当虚拟机启动时,诸如“Xmx”之类的参数用于指定诸如最大堆空间之类的指示符。当然,堆也是垃圾收集器关注的区域,因此堆空间将被不同的垃圾收集器进一步细分。最著名的是新一代和老一代的划分。

(4)方法区,这是所有线程共享的一个内存区域,用于存储所谓的元数据,例如类结构信息以及相应的运行时常量池,字段,方法代码等。由于HotspotJVM的早期实现,许多人习惯于调用方法领域是永久的一代。在OracleJDK8中,永久代被删除,并且同时添加了元数据区域。

(5)运行时常量池,这是方法区域的一部分。如果仔细分析反编译的类文件结构,则可以看到各种信息,例如版本号,字段,方法,超类和接口,而另一信息是常量池。Java的常量池可以存储各种常量信息,无论是在编译时生成的各种文字还是需要在运行时确定的符号引用,因此它比一般语言的符号表中存储的信息要广泛。

(6)本地方法栈,它和Java虚拟机是非常相似的,支持对本地方法的调用,也是每个线程都会创建一个。在OracleHotspotJVM中,本地方法栈和Java虚拟机栈是在同一块区域,这完全取决于技术实现的决定,并未在规范中强制。

推荐阅读:java架构师培训:java最佳测试框架JBehave的基本介绍

如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1160405674,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值