博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java内存结构
阅读量:5249 次
发布时间:2019-06-14

本文共 944 字,大约阅读时间需要 3 分钟。

 

Java 堆(Java Heap):

        概念:Java 堆 是Java 虚拟机管理的内存中最大的一块。是被所有线程共享的一块内存区域。在Java 虚拟机启动时候创建。

        作用:所有实例对象,数组都要在堆上分配。

        别名:GC 堆(garbage collected heap),因为堆是垃圾回收器管理的主要区域

        堆的结构:

            内存回收角度:新生代(eden区,s0,s1),老年代

            内存分配角度:还有可能划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer,TLAB))

 

如果堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。

 

 

Java虚拟机Java Virtual Machine Stacks):

   概念:java 虚拟机栈是描述的java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

   作用:存放基本数据类型,对象引用,局部变量

   每个线程都是独立栈

   这个区域规定了两种异常状态:如果线程请求的栈深度大于虚拟机所允许的深度,则抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,在扩展是无法申请到足够的内存,就会抛出OutOfMemoryError异常。

 

本地方法栈(Native Method Stack):

     Java 语言调用外部语言(C语言,虚拟机使用到的native方法服务

 

方法区:jdk1.8之前叫做永久区,垃圾回收机制一般不会去回收的,但是full gc 还是回去回收的。

      概念:线程共享的内存区域

      作用:存储类信息、常量、静态变量、即时编译器编译后的代码等数据。

      运行时常量池是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在加载后进入方法区的运行时常量池中存放。

 

执行引擎:

虚拟机核心的组件就是执行引擎,它负责执行虚拟机的字节码,一般户先进行编译成机器码后执行

 

 

 

 

 

 

 

   

 

 

转载于:https://www.cnblogs.com/pickKnow/p/11116572.html

你可能感兴趣的文章
[设计模式]适配器模式与外观模式
查看>>
自定义分页控件,修改自AspNetForums.Controls.Pager
查看>>
ssh 免签登录 亲测可以
查看>>
Linux 进程资源用量监控和按用户设置进程限制
查看>>
IE浏览器整页截屏程序(二)
查看>>
IOS小技巧积累
查看>>
web页面设计稿的完美还原
查看>>
D3.js 之 d3-shap 简介(转)
查看>>
制作满天星空
查看>>
MyBatis日记(三):戏说MyBatis配置文件
查看>>
$_POST和$GLOBALS['HTTP_RAW_POST_DATA'] 的区别
查看>>
类和结构
查看>>
遍历文件夹下所有dll的类
查看>>
Centos 7.6 部署 Jumpserver 1.5.0
查看>>
CSS3选择器(二)之属性选择器
查看>>
[转]Doing more with Outlook filter and SQL DASL syntax
查看>>
[转]事务(ADO.NET)
查看>>
[转]JS跨域总结
查看>>
c# 后台生成微信小程序带参数二维码
查看>>
python所有的魔术方法
查看>>