摘要:在运行程序时,会有把内存分成如下几个区域区域线程私有共享主要用途程序计数器私有可以看作是当前线程执行的字节码行号指示器,字节码解释器会通过改变程序计数器的值来记录下一条需要执行的字节码命令分支循环跳转线程恢复都需要依赖程序计数器来完成虚拟机
jvm在运行Java程序时,会有把内存分成如下几个区域:
区域 | 线程私有/共享 | 主要用途 |
---|---|---|
程序计数器 | 私有 | 可以看作是当前线程执行的字节码行号指示器,字节码解释器会通过改变程序计数器的值来记录下一条需要执行的字节码命令;分支、循环、跳转、线程恢复都需要依赖程序计数器来完成 |
虚拟机栈 | 私有 | Java方法执行的内存模型:每个方法运行时都会创建一个栈帧,用于存储局部变量表(常见的各种基本数据类型以及对象引用)、操作数栈、动态链接、方法出口等信息;方法开始执行时,栈帧入栈;方法结束时,栈帧出栈 |
本地方法栈 | 私有 | 和虚拟机栈类似,虚拟机栈为虚拟机执行的java方法(字节码方法)服务,本地方法栈则是为虚拟机执行的Native方法服务;HotSpot虚拟机则把本地方法栈和虚拟机方法栈直接合到了一起 |
堆内存 | 共享 | 1. 虚拟机内存中最大的一块,所有线程共享;堆内存唯一的目的就是存放对象实例(对象或数组); 2. 同时堆内存也是垃圾回收器管理的主要区域,所以也被称作(gc堆); 3.堆内存可以分为新生代:Eden、Survivor(From、To)和老年代 |
方法区 | 共享 | 用于存储已经被加载的类信息、常量、静态变量、即时编译器编译后的代码等 |
运行时常量池 | 共享 | 运行时常量池是方法区的一部分:Class文件中除了有类的版本、字段、方法、接口等基本信息外,还包括一项常量池,用来存放编译期生成的各种常量和符号引用(虚拟机类加载的解析阶段会将常量池中的符号引用替换为直接引用) |
参考资料:《深入理解Java虚拟机》- 周志明
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72642.html
摘要:也正是因此,一旦出现内存泄漏或溢出问题,如果不了解的内存管理原理,那么将会对问题的排查带来极大的困难。 本文已收录【修炼内功】跃迁之路 showImg(https://segmentfault.com/img/bVbsP9I?w=1024&h=580); 不论做技术还是做业务,对于Java开发人员来讲,理解JVM各种原理的重要性不必再多言 对于C/C++而言,可以轻易地操作任意地址的...
摘要:所以我们提到的内存回收大都是指堆内存的回收。根据堆内存对对象的代的划分我们对堆内存有这样划分各版本和种类的垃圾回收器各有其用武之地,配合使用它们得到最好的效果十分重要。 这篇文章的素材来自周志明的《深入理解Java虚拟机》。作为Java开发人员,一定程度了解JVM虚拟机的的运作方式非常重要,本文就一些简单的虚拟机的相关概念和运作机制展开我自己的学习过程。 虚拟机内存分区 java虚拟机...
摘要:深入理解虚拟机高级特性与最佳实践第二版读书笔记与常见面试题总结上篇文章传送门深入理解虚拟机之内存区域本节常见面试题推荐带着问题阅读,问题答案在文中都有提到如何判断对象是否死亡两种方法。虚引用主要用来跟踪对象被垃圾回收的活动。 《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版》读书笔记与常见面试题总结 上篇文章传送门: 深入理解虚拟机之Java内存区域 本节常见面试题(推荐带着...
阅读 2322·2021-09-29 09:42
阅读 557·2021-09-06 15:02
阅读 2596·2021-09-02 15:40
阅读 2114·2019-08-30 14:23
阅读 1861·2019-08-30 13:48
阅读 1290·2019-08-26 12:01
阅读 959·2019-08-26 11:53
阅读 2141·2019-08-23 18:31