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 程序计数器 指示当前正在执行的字节码指令地址 ...
随机推荐
- intellij idea 整合springboot和mybatis
参考: http://blog.csdn.net/winter_chen001/article/details/77249029
- spark脑图
spark脑图:
- LNMP架构及应用部署!(重点)
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构. WNMP代表的就是:Windows系统下Nginx+MySQL+PHP这种网站服务器架构. WAMP代表的就是: ...
- Maven的安装与配置(eclipse,idea)
Maven的安装与配置 一.需要准备的东西 1. JDK 2. Maven程序包 3. Eclipse 4. Idea 二.下载与安装 1. 前往https://maven.apache.org/ ...
- 最全Python学习路线图【2020最新版】
2020年最新的python学习大纲,专为python高薪打造另外很多人在学习Python的过程中,往往因为没有好的教程或者没人指导从而导致自己容易放弃,为此我建了个Python交流.裙 :一久武其而 ...
- ECS 系统 Entity-Component-System
已经推出了很久了, 貌似也有一些人开始使用, 我是在看守望先锋的程序设计相关文章的时候看到 ECS 的, 从它的设计逻辑上看, 核心就是 Composition over inheritance (o ...
- 为PHP开发搭建环境
为了能在自己的电脑上(mac OS系统)开始编写PHP代码并完成运行,需要有: 1.安装Web服务器 2.安装PHP 3.安装数据库,比如MySQL 4.一个PHP的IDE 为了上面所提到的1~3步的 ...
- JS实现对对象的深拷贝
手动遍历对象拷贝 /** * 深拷贝 * @param {*} obj 拷贝对象(object or array) * @param {*} cache 缓存数组 */ function deepCo ...
- 导出EXCEL设置单元格格式
怎么设置导出的EXCEL文件的列格式 如何设置导出的EXCEL文件的列格式在office的EXCEL中我们可以在一个EXCEL文件中,选中一列再点击鼠标右键,选择设置单元格格式,可以将这一列设为文本格 ...
- string和 new string的区别
栈区 存 引用和基本类型,不能存对象,而堆区存对象.==是比较地址,equals()比较对象内容. (1) String str1 = "abcd"的实现过程:首先栈区创建 ...