jvm 内存管理(一)

jvm 运行时数据区,包含

 栈:(线程独有)

    本地方法栈(Native Method Stack)

             为了JVM 执行 native方法而 存在,起到类似VM Stack的作用,HotSpot 就把 本地和虚拟的合并。

    虚拟机栈(VM Stack),又称栈帧(Stack Frame),用于保存局部变量表,操作栈,动态链接,方法出口

         一个方法的调用到执行完成,就是一个VM Stack的入栈到出栈过程。

         局部变量表存储单位为slot(对于不同的OS,slot不变),存放在局部变量表中的数据,包括8大基础类型和reference类型(表示一个对象的起始地址,或句柄或其他代表位置的)和returnAddress类型(指向一条字节码指令的地址),除了long和double占2个slot,其他都1个

 StackOverFlow 异常: 请求的栈深度大于JVM允许范围

 OutOfMemory异常: 当JVM允许VM Stack动态扩展时,无法申请到足够内存是抛出(大部分现存JVM允许)

 

    程序计数器程序执行的字节码行号指示器,当处理多线程时,需要每个线程的程序计数器保存当前线程进行字节码命令行

 

方法区,
用于存放类信息,静态变量,常量等数据,GC效果差,比较少

    运行时常量池(Runtime Constant Pool), Class文件中保存了常量池(Constant Pool Table), 用于存放编译时期生成的各种字面量和符号引用, 将会在类加载后存放到运行时常量池

    Java语言可以在运行时,载入常量,比如使用String.intern()方法

 

 内存中存放 对象实例的地方,所线程共享,经常被GC,大小通过-Xms , -Xmx 来配置(最好的优化方式是,选择合适的值,将-Xms和-Xmx设置大小一样,避免频繁的GC)

 

JVM外 内存 , 称为 直接内存

JAVA 可以在 NIO 模式下,基于Channel或Buffer的I/O模式中,用到直接内存(jvm控制外),包括native方法也可以直接操作直接内存,应该也可能发生OutOfMemory 异常

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值