JAVA虚拟机初步学习之内存管理分配
来源:互联网 发布:阿里云香港测试ip 编辑:程序博客网 时间:2024/06/05 17:59
前言:
很久不写文章了。进来工作轻松了不少。不之前学习整理的东西共享一下,由于本人技术还有限。有不足之处还希望大家不要见怪!
JVM的架构:
JVM的架构主要分为:方法区,堆,java方法栈,本地方法栈,程序计算器。
方法区和堆的数据是被所以线程共享的,栈和程序计数器的数据是每一个线程自己独立的。
程序计算器:
它是JVM的中一个很小的内存空间。
.class文件存放的字节码的指令器。
作用:
执行字节码指令。 程序的分支,循环,跳转,异常处理,线程恢复等等都依赖程序计算器要完成。
实现原理:
JVM的多线程是通过线程轮流切换分配处理器执行时间来实现的。
特性:
每一个线程都有一个独立的程序计算器。个个线程之间的程序计算器互不影响。
是每一个线程私有的。
程序计数器是不会存在内存溢出的情况的。
JVM栈:
每一个方法执行时JVM都会分配一个独立的内存空间,用于存放局部变量表,操作栈,动态链接,方法出口等。这个线程独立的内存空间称为栈。
方法执行:实际上就是入栈出栈的过程。
作用:
用于存放局部变量表,操作栈,动态链接,方法出口等。服务的对象是java方法。
小知识:JVM除了java方法还有其他方法,例如本地方法(c的方法,c++的方法等)
特性:
1.每一线程私有的内存空间。
2.局部变量表存放的数据时:编译期间可知的八大基本和对象引用类型。特别注意,存放的对象引用不等同于对象本身,存放的可能是对象起始地址的引用指针,也可能是代表对象的句柄。
3.编译期间:局部变量表所需要的内存空间就分配完毕了。所以执行这个方法时(运行期间),不会改变局部变量表的大小。但是可以存在动态扩展。(编译期间所以方法所需要的内存空间就分配好 )
4..当动态扩展时,扩展的长度超过了JVM规范允许的长度就会内存溢出。
每次方法调用都会有一个栈帧压入虚拟机栈,操作系统给JVM分配的内存是有限的,JVM分配给“虚拟机栈”的内存是有限的。
如果方法调用过多,导致虚拟机栈满了就会溢出。这里栈深度就是指栈帧的数量。
如果方法调用过多,导致虚拟机栈满了就会溢出。这里栈深度就是指栈帧的数量。
本地方法栈:
本地方法栈和JVM栈类型。区别是服务对象不一样。本地方法的服务对象是本地方法。常见的本地方法,可以到Objet类中查看一下,例如HashCode方法,wait方法等等。
堆:
作用:
存放对象实例/实例变量和数组的内存空间。
特点:
存储实例变量。
存储对象实例。
堆被所有线程共享资源。
JVM启动就创建了堆。
是垃圾回收器主要处理的空间。
当存储内存量超过可扩展内存,会内存溢出。
方法区:
作用:
存放被JVM已加载的类信息,常量,静态变量,方法,编译生产的代码等。
特点:
被所有线程共享。
运行时常量池:
运行时常量池是方法区的一部分,用于存放编译期间生产的各种字面量(常量)和符合引用。
阅读全文
0 0
- JAVA虚拟机初步学习之内存管理分配
- java虚拟机学习之内存管理
- java虚拟机之内存管理
- Java虚拟机之内存管理
- JAVA虚拟机之内存管理
- Java虚拟机专题之内存分配(读书笔记)
- Java内存管理之内存分配
- 虚拟机之内存管理
- 《深入理解java虚拟机》之内存管理
- 深入理解JAVA虚拟机之内存管理
- Java虚拟机专题之内存管理(读书笔记)
- java之内存分配
- Java虚拟机之内存
- 内存管理之内存分配
- java基础之内存分配
- 深入理解Java虚拟机之内存管理(读书笔记)
- Java虚拟机之内存模型
- java虚拟机之内存结构
- IP核开发流程
- 2017网易游戏雷火盘古实习生招聘笔试真题:最大和 [python]
- iOS-APP启动页加载广告
- web前端css--position
- 2017网易游戏雷火盘古实习生招聘笔试真题:赛马 [python]
- JAVA虚拟机初步学习之内存管理分配
- 2017.11.20
- jinfo
- 2017-11-20 6周1次课 正则------grep
- TensorFlow全新的数据读取方式:Dataset API入门教程
- 几种常见开源软件授权协议
- 入手爬虫利器:phantomjs+selenium、自动填充文本框、自动点按钮
- jhat
- Tenserflow