前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java虚拟机规范阅读笔记—第2章

Java虚拟机规范阅读笔记—第2章

作者头像
阿杜
发布2018-08-06 10:43:03
3670
发布2018-08-06 10:43:03
举报
文章被收录于专栏:阿杜的世界阿杜的世界

运行时数据区包括:PC、栈、堆、方法区、栈帧(Frames)、

栈:

跟栈相关的异常有:

  1. StackOverflowError:如果栈的大小是固定的,那么如果某个线程尝试获取超过这个规格的栈的时候会抛这个异常;
  2. OutOfMemoryError:如果栈的大小是可扩展的,那么如果在扩展的时候发现系统以及没有可用内存,会抛出这个异常;

栈帧

在发生一个方法调用的时候会创建一个栈帧,在方法执行结束(无论是正常结束还是抛出异常)的时候栈帧会被销毁。栈帧在JVM的栈上分配,栈属于某个线程。每个栈帧都有自己的本地变量数组、运算元栈、指向运行时常量池的引用和指向当前方法所属类的引用。

注意:

  1. 运算元栈的作用类似于CPU中的寄存器。参考:https://stackoverflow.com/questions/24427056/what-is-an-operand-stack
  2. 运算元栈中的数据带有类型
  3. 本地变量用于存放方法参数和本地变量,对于类的方法调用:方法参数从本地变量数组的0开始;对于实例对象的方法调用:位置0用于存放被调用方法的实例,即this,其他方法参数和本地变量从1开始存放。

特殊方法

  1. init和cinit方法:https://stackoverflow.com/questions/8517121/java-what-is-the-difference-between-init-and-clinit

签名多态方法(Signature Polymorphic Methods)

  1. MethodHandle(java 7引入),动态确定目标方法,把Method Handle与C/C++中的Function Pointer,或者C#里面的Delegate类比一下
  2. VarHandle(java 9引入)
    1. 目标是:https://stackoverflow.com/questions/43558270/correct-way-to-use-varhandle-in-java-9
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.05.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档