bboyjing's blog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 公益404
bboyjing's blog

自己动手写JVM二十二【类和对象(五)】

发表于 2017-02-16 | 分类于 JVM

类和对象相关指令

本节继续来学习类和对象剩下的ldc指令,和测试。

ldc指令

ldc系列指令从运行时常量池中加载常量值,并把它推入操作数栈。ldc系列指令属于常量类指令,共3条。其中ldc和ldc_w指令用于加载int、float和字符串常量,java.lang.Class实例或者MethodType和MethodHandle实例。ldc2_w指令用于加载long和double常量。ldc和ldc_w指令的区别仅在于操作数的宽度。本节先处理int、float、long和double常量,部分其余的后面再学。
ldc系列指令位于/instructions/constants/ldc.go文件中:

阅读全文 »
bboyjing's blog

自己动手写JVM二十一【类和对象(四)】

发表于 2017-02-16 | 分类于 JVM

类和对象相关指令

本节继续来学习类和对象相关指令

putstatic和getstatic指令

putstatic指令给类的某个静态变量赋值,它需要两个操作数,第一个操作数是uint16索引,来自字节码。通过这个索引可以从当前类的运行时常量池中找到一个字段符号引用,解析这个字段符号引用就可以知道给类的哪个静态变量赋值。第二个操作数是要赋给静态变量的值,从操作数栈中弹出。该指令实现代码位于putstatic.go文件中:

阅读全文 »
bboyjing's blog

自己动手写JVM二十【类和对象(三)】

发表于 2017-02-09 | 分类于 JVM

类和字段符号引用解析

类符号引用解析

先修改class.go文件,添加判断是否能访问其他类的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// self class是否能被other class访问
func (self *Class) isAccessibleTo(other *Class) bool {
/*
若self class访问标识为public或者两个类在同一个包下,则可以访问
暂时简单地按照包名来检查类是否属于同一个包
*/
return self.IsPublic() ||
self.getPackageName() == other.getPackageName()
}
// 获取包名
func (self *Class) getPackageName() string {
if i := strings.LastIndex(self.name, "/"); i >= 0 {
return self.name[:i]
}
return ""
}

阅读全文 »
bboyjing's blog

自己动手写JVM十九【类和对象(二)】

发表于 2017-02-09 | 分类于 JVM

本章继续学习类和对象。

类加载器

Java虚拟机的类加载系统十分复杂,本节将初步实现一个简化版的类加载器,后面还会进行扩展。定义ClassLoader结构体,位于class_loader.go文件下:

阅读全文 »
bboyjing's blog

自己动手写JVM十八【类和对象(一)】

发表于 2017-02-08 | 分类于 JVM

本章将实现线程共享的运行时数据区,包括方法去和运行时常量池。将进一步处理ClassFile结构体,把它加以转换,放进方法去以后供后续使用。还会初步讨论类和对象的设计,实现一个简单的类加载器,并且实现类和对象相关的部分指令。本章实现代码位于/rtdata/heap包下,先将之间定义的object.go文件移到heap包下,注意修改包名,以及使用到Object结构体的文件(slot.go、local_vars.go、operand_stack.go)。

方法区

方法区是运行时数据区的一块逻辑区域,由多个线程共享。方法区主要存放从class文件获取的类信息,此外,类变量也存放在方法区中。当Java虚拟机第一次使用某个类时,它会搜索类路径,找到相应的class文件,然后读取并解析class文件,把相关信息放进方法区。至于方法区到底位于何处,是固定大小还是动态调整,是否参与垃圾回收,以及如何在方法区内存放类数据等,Java虚拟机规范并没有明确规定。下面先来看看有哪些信息需要放进方法区。

阅读全文 »
1…161718…30
bboyjing

bboyjing

147 日志
17 分类
20 标签
友情链接
  • bailaohe
© 2021 bboyjing
由 Hexo 强力驱动
主题 - NexT.Mist