bboyjing's blog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 公益404
bboyjing's blog

自己动手写JVM三十二【异常处理(一)】

发表于 2017-03-06 | 分类于 JVM

异常处理是Java语言非常重要的一个语法,本章从Java虚拟机的角度来讨论异常是如何被抛出和处理的。

异常处理概述

在Java语言中,异常可以分为两类:Checked异常和Unchecked异常。Unchecked异常包括java.lang.RuntimeException、java.lang.Error以及它们的子类,其他异常都是Checked异常。所有异常都继承自java.lang.Throwable。如果一个方法有可能导致Checked异常抛出,则该方法要么需要捕获该异常并妥善处理,要么必须把该异常列咋自己的Throws子句中,否则无法通过编译。Unchecked异常没有这个限制。不过,Java虚拟机并没有这个规定,这只是Java语言的语法规则。

阅读全文 »
bboyjing's blog

自己动手写JVM三十一【本地方法调用(三)】

发表于 2017-03-06 | 分类于 JVM

本节继续实现一些本地方法。

字符串拼接和String.intern()方法

在Java语言中,通过加号来拼接字符串。作为优化,javac编译器会把字符串拼接操作转换成StringBuilder,比如说下面这段代码:

1
2
3
4
String hello = "hello,";
String world = "world!";
String str = hello + world;
System.out.println(str);

很可能会被javac优化成下面这样:

阅读全文 »
bboyjing's blog

自己动手写JVM三十【本地方法调用(二)】

发表于 2017-03-06 | 分类于 JVM

反射

本节继续将反射相关内容

修改类加载器

Class和Object结构体准备好了,接下来修改类加载器,让每一个加载到方法区中的类都有一个类对象与之关联。修改/rtdata/heap/class_loader.go文件的NewClassLoader()方法:

阅读全文 »
bboyjing's blog

自己动手写JVM二十九【本地方法调用(一)】

发表于 2017-03-06 | 分类于 JVM

我们已经知道,要想运行Java程序,除了Java虚拟机之外,还需要Java类库的配合。Java虚拟机和Java类库的配合。Java虚拟机和Java类库一起构成了Java运行环境。Java类库主要用Java语言编写,一些无法用Java语言实现的方法则使用本地语言编写,这些方法叫做本地方法。从本章开始将陆续实现一些Java类中的本地方法。为了不陷入JNI规范的细节之中,我们将使用Go语言来实现。本章的所有代码位于/native包下。

阅读全文 »
bboyjing's blog

自己动手写JVM二十八【数组和字符串(三)】

发表于 2017-03-05 | 分类于 JVM

字符串

在class文件中,字符串是以MUTF8格式保存的,这一点之前了解过了。在Java虚拟机运行期间,字符串以java.lang.String对象的形式存在,而在String对象内部,字符串又是以UTF16格式保存。字符串相关功能大部分都是由String(和StringBuilder类等)类提供的,本节我们只学习一些辅助功能即可。
String类有两个实例变量,其中一个是value,类型是字符数组,用于存放UTF16编码后的字符序列。另一个是hash,缓存字符串的哈希码。有兴趣可以再看下Java中String类的实现。

阅读全文 »
1…141516…30
bboyjing

bboyjing

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