一、线程独占区
1、程序计数器
程序计数器是一块处于线程独占区较小的内存空间,它可以看是当前线程所执行的字节码的行号指示器。
如果线程执行的是Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址。如果正在执行的是native方法,这个计数器的值为undefined.
此区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域
2、Java虚拟机栈
虚拟机栈描述的是Java方法执行的动态内存模型。
1)栈帧
每个方法执行,都会创建一个栈帧,伴随着方法从创建到执行完成。用于存储局部变表,操作数栈,动态链接,方法出口等。
2)局部变量表
存放编译期可知的各种基本数据类型,引用类型,returnAdress类型
局部变量表的内存空间在编译期完成分配,当进入一个方法时,这个方法需要在帧分配多少内存是固定的,在方法运行期间是不会改变局部变量表的大小。
如果栈的大小没有限制,最终会报OutOfMemory 异常
* Hot Spot是不分虚拟机栈和本地方法栈,他们是在一块儿的,合二为一,这里讲的是Java虚拟机规范*
3、本地方法栈
本地方法栈与虚拟机栈及其相似,唯一区别是:
- 虚拟机栈为虚拟机执行Java方法服务
- 本地方法栈为虚拟机执行native方法服务
二、线程共享区
1、堆
- 存放对象实例
- 垃圾收集器管理的主要区域
- 新生代、老年代
2、方法区
存储虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
- 类的版本
- 字段
- 方法
- 接口
方法区和永久代
垃圾回收在方法区的行为
异常的定义
- OutOfMemory
3、运行时常量池(方法区的一部分)
public class Test {
public static void main(String[] args) {
String a = “123”; //静态常量
String b = “123”; System.out.println(a == b); //true String c = new String(“123”);
System.out.println(a == c); //false System.out.println(a == c.intern()); // true public native String intern(); c.intern() 是运行时常量 (a + b) 也会产生一个运行时常量 // intern() 将c由堆中扔到字符串常量池中
}
}
4、直接内存
NIO中 ,用buffer,使用的是堆外的内存,为提高效率。不受jvm的内存大小制约,但是受物理内存大小的制约。
【四】Java虚拟机内存区域初识的更多相关文章
-
重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分
一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...
-
java虚拟机内存区域理解
java虚拟机有的区域随着虚拟机进程的启动而存在, 有的区域依赖用户线程的启动和结束而建立和销毁. 程序计数器:为了线程切换后能恢复到正确的执行位置,每个线程都有一个独立的程序计数器.(针对java方 ...
-
总结Java虚拟机内存区域模型
本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下Java运行时的数据区域,Java虚拟机在执行Java程序 ...
-
一文解析总结Java虚拟机内存区域模型
最近抽空看了一点<深入理解Java虚拟机>,本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下J ...
-
Java虚拟机内存区域堆(heap)的管理
在上一节中Java 出现内存溢出的定位以及解决方案 中对于Java虚拟机栈以及方法区的内存出现的异常以及处理方式进行了解析,由于Java虚拟机对于堆的管理十分复杂,并且Java虚拟机中最基本的内存区域 ...
-
java虚拟机内存区域的划分以及作用详解
序言 为什么有时候学着学着会突然之间觉得一切度是那么无趣,男的每个月也有那么几天难道?哈哈,不然是什么,我还是要坚持,可以做少一点,但是不能什么度不做.总会过去的,加油 --WH 一.运行时数据区 什 ...
-
java虚拟机内存区域
java虚拟机运行时数据 程序计数器 是一块较小的内存空间,属于线程私有的内存. 用来记录正在执行的虚拟机字节码指令的地址. 每个线程都需要一个独立的程序计数器,各个线程间的计数器互不影响,独立存储. ...
-
一、java虚拟机内存区域
内存区域 java虚拟机在java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.java虚拟机规范将JVM管理的内存分为:程序计数器.本地方法栈.Java虚拟机栈.方法区.Java堆.如下 ...
-
Java虚拟机内存区域划分
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.以及创建和销毁的时间.有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结 ...
随机推荐
-
Java面向对象编程 第一章 面向对象开发方法概述
一.软件开发经历的生命周期: ①软件分析 ②软件设计 ③软件编码 ④ 软件测试 ⑤ 软件部署 ⑥软件维护 二.为了提高软件开发效率,降低软件开发成本,一个优良的软件系统应该具备以下特点: ① 可重用性 ...
-
【淘淘】Spring整合Quartz框架
我在外面工作实习的时候,我们做的项目是一个日报子系统,也就是定时定点为公司生成一些报表数据还有一些数据反馈.这时候我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.当时,我做 ...
-
avalon使用笔记
//保存取消操作(使用双向绑定) <div ms-controller='test'> <table border="1" style="border- ...
-
.NET常用操作小知识
一..NET截取指定长度汉字超出部分以“.....”表示 /// <summary> /// 将指定字符串按指定长度进行剪切, /// </summary> /// <p ...
-
库不存在的排查方法:ImportError: No module named selenium2Library
解决办法: 把selenium2Library改成Selenium2Library 安装下面四个: python-2.7.13.amd64.msi robotframework-ride-1.5. ...
-
类 BufferedReader
以前学习的时候也没有太在意,在项目中使用到了才发现呵呵 1.读取一个txt文件,方法很多种我使用了字符流来读取(为了方便) FileReader fr = new FileReader("f ...
-
盼盼Degenerate——清除浮动的方法
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name= ...
-
Android必知必会-长按返回健退出
背景 平常比较常见的都是一定时间间隔内按两次返回键来退出应用,并且第一次点击会有相应的提示,网上资料比较多,这里写一下,长按返回键退出. 实现 实现的方案常用的有两个: 重写dispatchKeyEv ...
-
css 修改默认滚动条样式
来自:https://www.cnblogs.com/juqian/p/6273808.html 侵删 <div class="inner"> <div clas ...
-
33 ArcToolBox学习系列之数据管理工具箱——投影与变换(Projections and Transformations)未完待续……
工具箱位置 打开ArcToolBox,找到工具集Projections and Transformations,位置如下:ArcToolbox--Data Management Tools--Proj ...