JAVA虚拟机:内存各个区介绍
概述:java应用程序由java虚拟机自动管理程序执行期间内存管理。
优势:1、不再需要程序员去为使用的内存在程序中手动编写释放内存代码。
2、由虚拟机管理内存不容易出现内存泄漏和内存溢出的问题。
缺点:一旦程序在执行过程中出现内存泄漏,排查错误将是一项“艰难"工作。
java虚拟机内存管理详解:
java虚拟机将内存划分为以下区域:
线程共享区:方法区(Method Area)/虚拟机堆(Heap)
线程隔离或者说独占区:程序计数器(Program Counter Register)/虚拟机栈(VM Stack)/本地方法栈(Native Method Stack)
线程私有的程序计数器区:
功能:在JVM中,通过程序计数器来记录程序的字节码执行位置。程序计数器具有线程隔离性,每个线程拥有自己的程序计数器,程序在执行过程中,单个线程通过程序计数器区知道自己下一步需要执行哪条字节码指令,所以程序计数器里面记录是虚拟机字节码指令的地址,而不是字节码指令。
线程私有的虚拟机栈区:
功能:java方法执行的内存模型区域,每个方法在执行同时,都会创建一个私有的栈幀,栈幀中存放方法的局部变量表,操作数栈、动态链接、方法的return信息等,每一个方法从调用到执行完毕,就对应着每个栈幀在虚拟机栈中从入栈到出栈的整个过程。
局部变量表:存放编译期间可知的各种基本数据类型,对象的引用(引用可以是指针、对象的句柄),句柄:系统为各个应用程序腾出一些内存地址,用来专门登记各个应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的,这个地址就是句柄;指针:对象的在系统内存中的物理地址,这个地址可以随着系统重新创建对象而改变;句柄相比于指针更具有可靠性,但效率比直接使用对象的指针要慢,因为系统需要额外划出一块内存去存放句柄与对象地址的映射关系。
线程私有的本地方法栈区:
功能:为虚拟机使用到的native方法服务。
线程间共享的虚拟机堆区:
功能:在虚拟机启动时创建,存放对象实例。需要逻辑上堆内存空间连续,物理上可不连续。
线程共享的虚拟机方法区:
功能:存放已被虚拟机加载的类信息、常量、静态变量,编译器编译后的代码数据;方法区包括另一个区域:运行时常量池,运行时常量池具备动态添加数据能力。
即除编译期间可以存放常量外,运行期间如产生常量,也可放入常量池中。intern方法,这个方法是一个 native 的方法,但注释写的非常明了。“如果常量池中存在当前字符串, 就会直接返回当前字符串. 如果常量池中没有此字符串, 会将此字符串放入常量池中后, 再返回”。
JAVA虚拟机:内存各个区介绍的更多相关文章
- JVM基础系列第6讲:Java 虚拟机内存结构
看到这里,我相信大家对于一个 Java 源文件是如何变成字节码文件,以及字节码文件的含义已经非常清楚了.那么接下来就是让 Java 虚拟机运行字节码文件,从而得出我们最终想要的结果了.在这个过程中,J ...
- 浅谈Java虚拟机内存中的对象创建,内存布局,访问定位
参考于 深入理解Java虚拟机 这里介绍HotSpot虚拟机(自带的虚拟机) 1.对象的创建 对于程序员来说,创建对象的方法: User user1 = new User(); User user2 ...
- Java虚拟机内存模型及垃圾回收监控调优
Java虚拟机内存模型及垃圾回收监控调优 如果你想理解Java垃圾回收如果工作,那么理解JVM的内存模型就显的非常重要.今天我们就来看看JVM内存的各不同部分及如果监控和实现垃圾回收调优. JVM内存 ...
- Java虚拟机-内存tips
java虚拟机内存可以分为独占区和共享区. 独占区:虚拟内存栈.本地方法栈.程序计数器. 共享区:方法区.Java堆(用来存放对象实例). 程序计数器 比较小的内存空间,当前线程所执行的字节码的行号指 ...
- java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案
java虚拟机内存不足,"Could not create the Java Virtual Machine"问题解决方案 在运行java程序时,遇到问题"Could n ...
- 总结Java虚拟机内存区域模型
本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下Java运行时的数据区域,Java虚拟机在执行Java程序 ...
- Java虚拟机内存分配详解
简介 了解Java虚拟机内存分布的好处 1.了解Java内存管理的细节,有助于程序员编写出性能更好的程序.比如,在新的线程创建时,JVM会为每个线程创建一个专属的栈 (stack),其栈是先进后出的数 ...
- java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案
在运行java程序时,遇到问题"Could not create the Java Virtual Machine."如下截图:
- 重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分
一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...
随机推荐
- 【SSM】日志框架 logback
logback.xml <?xml version="1.0" encoding="UTF-8" ?> <configuration scan ...
- 【PAT甲级】1060 Are They Equal (25 分)(需注意细节的模拟)
题意: 输入一个正整数N(<=100),接着输入两个浮点数(可能包含前导零,对于PAT已经习惯以string输入了,这点未知),在保留N位有效数字的同时判断两个数是否相等,并以科学计数法输出. ...
- PhpStorm For Mac 安装使用及 Php 开发的 ‘Hello World’
PHP全称为:Hypertext Preprocessor,中文名为:『超文本预处理 器』是一种通用开源脚本语言,主要用于Web应用开发(俗称做网站或 者做后台!) 编译软件:PHPStorm for ...
- [ DLPytorch ] 线性回归&Softmax与分类模型&多层感知机
线性回归 基础知识 实现过程 学习笔记 批量读取 torch_data = Data.TensorDataset(features, labels) dataset = Data.DataLoader ...
- 「JSOI2014」矩形并
「JSOI2014」矩形并 传送门 我们首先考虑怎么算这个期望比较好. 我们不难发现每一个矩形要和 \(n - 1\) 个矩形去交,而总共又有 \(n\) 个矩形,所以我们把矩形两两之间的交全部加起来 ...
- Python3.5学习之旅——day2
本节内容: 1.模块初识 2..pyc是什么? 3.Python的数据类型 4.三元运算 5.进制 6.byte类型 7.数据运算 8.列表 9.元组 10.课后练习 一.模块初识 由day1的学习我 ...
- 后台框架 FastAdmin V1.0.0.20200228 发布,为疫情防控作贡献
后台框架 FastAdmin V1.0.0.20200228 发布,为疫情防控作贡献 https://www.oschina.net/news/113694/fastadmin-1-20200228- ...
- kali apt update 错误——下列签名无效: EXPKEYSIG ED444FF07D8D0BF6 Kali Linux Repository
这是因为key过期了 wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add apt update
- Windows程序设计学习笔记(1):一个简单的windows程序
<Windows程序设计>(第五版)(美Charles Petzold著) #include<windows.h> LRESULT CALLBACK WndProc(HWND, ...
- 【PAT甲级】1011 World Cup Betting (20 分)
题意: 给出三组小数,每组三个,分别代表一场比赛下注一块钱胜平负的赔率.输出投注的方案并计算投注两块钱期望收获.(赔率相乘后乘上0.65再减去本金2块钱) AAAAAccepted code: #in ...