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 程序计数器 指示当前正在执行的字节码指令地址 ...
随机推荐
- 夯实Java基础(二十五)——JDBC使用详解
1.JDBC介绍 JDBC的全称是Java Data Base Connectivity(Java数据库连接).是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问(例如MyS ...
- Solidity基本数据结构
任何一个智能合约都会在最开头表示使用的编译器版本 如:prama solidity ^0.4.0 数组: //静态数组 大小长度确定 uint[2] fixedArray; //动态数组,可以随意添加 ...
- 一键绑定-提供一键动态绑定键盘输入的效果[C#制作](2020年寒假小目标07)
日期:2020.01.31 博客期:139 星期五 [需求部分] 嗯,其实我是找了一下网站,要实现按下一个键盘键可以按照顺序输出想要的多个键盘键,差不多就是这样的功能.为什么我会有想实现这样功能的想法 ...
- MySQL更改默认的root账户密码
编辑mysql的配置文件:my.ini(在MySql安装目录下). 打开配置文件,在文件最后一行添加:skip-grant-tables,然后保存退出 意思为就是在启mysql时不启动grant-ta ...
- 十二 INPUT逻辑视图的配置,回显错误信息
Action接口中提供了五个逻辑视图的名称 SUCCESS ERROR LOGIN INPUT:input在某些拦截器会使用 NONE 配置逻辑视图:struts_demo2.xml,配置后出现错误信 ...
- LeetCode 83. Remove Duplicates from Sorted List(从有序链表中删除重复节点)
题意:从有序链表中删除重复节点. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode ...
- nacos 日志问题 ERR-CODE: [NACOS-0002], Type: [环境问题]
nacos配置中心配置后,项目启动正常,运行项目也正常,但是总是打印如下日志: 2019-10-11 15:44:09.792 [com.alibaba.nacos.client.Worker.lon ...
- SpringMVC 自定义类型转换
类型转换可以将请求参数转换为指定的类型.指定的格式(数据的格式化),然后传给业务方法的参数. Spring MVC内置了常用的类型转换器.如果内置的类型转换器满足不了需求,可以使用自定义的类型转换. ...
- [Linux] day02——什么是Linux
什么是linux? 一种操作系统计算机 = 硬件 +软件系统软件 = 内核 + 驱动应用软件 编程 上网 linux系统构成linux内核基本库 应用程序-------------------常见的操 ...
- linux系统登陆过程
一.物理直连登陆过程 初始化进程init 会根据直接连接的字符终端设备,打开getty程序,并关联在字符终端设备上tty1/2/3/4/5/6/7....上,在不同的终端设备上提示用户输入信息,等待终 ...