JVM
JVM
リュウセイリョウ
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
深入jvm 01. java代码是如何运行的?
1、为什么要用java虚拟机运行java代码?①在虚拟机中运行,给java提供了可移植性,一旦java源码被编译为字节码,就可以在不同平台的java虚拟机上运行,称之为"一次编写,到处运行"。②虚拟机为程序员提供了代码托管环境,它可以帮助java程序员做自动内存管理与垃圾回收相关工作,以及提供数组越界等的动态监测,让程序员更关注于代码的业务逻辑。2、jvm怎么运行java字节码的?首先,使用前端编译器将java源码编译为字节码文件,然后将字节码文件加载到java虚拟机中。jvm将运行时内存区域划分为原创 2020-07-16 12:44:57 · 239 阅读 · 0 评论 -
深入jvm 02. 你真的了解java基本数据类型吗
1、8种基本数据类型java中共有8种基本数据类型,分别是boolean、byte、short、char、int、float、double、long,其各自的值域和默认值如图所示,虽然默认值看起来各不相同,但在内存中都是0。对于boolean、byte、char、short这四种基本类型,如果作为局部变量存储在栈上时,所占空间和int以及reference类型是一样的,32位Hotspot中占4字节,64位中占8字节。如果作为类字段或者数组元素存储在堆中时,情况有所不同。byte、char、shor原创 2020-07-17 12:55:56 · 284 阅读 · 0 评论 -
深入jvm 03. 类的加载过程是什么样的?
1、加载类加载阶段中的"加载"工作,主要做三件事:1)通过一个类的全限定名来获取这个类的二进制字节流,这个字节流既可以是javac编译器生成的class文件,也可以是从压缩包中获取的字节流、从网络中获取的字节流、以及运行时计算生成的(比如动态代理技术);2)将这个字节流所代表静态存储结构转换为方法区的运行时数据结构;3)在内存中生成一个代表这个类的Class对象,作为方法区的这个类的各种数据的访问入口。数组类没有对应的字节流,数组类本身不通过类加载器创建,是由jvm直接在内存中动态构造出来的。其他类(包原创 2020-07-20 15:51:27 · 182 阅读 · 0 评论 -
深入jvm 04. 方法调用
1、重载与重写重载:在 java 语言中,同一个类中定义的多个方法,方法名相同,且参数类型不同,称之为重载。此外,如果子类中定义了与父类非private方法同名的方法,且参数类型不同,这同样构成了重载。重写:当子类定义了与父类非 private 方法同名的方法,且参数类型也相同,分两种情况:①如果两个方法都是 static 的,则子类方法隐藏父类方法;②如果两个方法都不是 static 的,且都不是 private 的,则子类方法重写了父类方法。( java 虚拟机的判定标准略微不同,见第2部分)重载原创 2020-07-22 15:33:48 · 242 阅读 · 0 评论 -
深入jvm 05. 异常处理流程
0、异常的概念所有异常都是 Throwable 类或者其子类的实例。Throwable 的两大直接子类,分别是Error和Exception。Error是编译时错误和系统错误,系统错误在除特殊情况下,都不需要你来关心,基本不会出现。而编译时错误,如果你使用了编译器,那么编译器会提示。而Exception是程序能捕获和处理的异常。RuntimeException是Exception的一个子类,表示运行时异常,这种异常我们不需要处理,即不要声明也不要处理这个异常,完全由虚拟机接管,比如空指针异常。Runti原创 2020-07-24 16:02:49 · 254 阅读 · 0 评论 -
深入jvm 06. 实现反射
1、反射 API1)获取Class对象:①使用静态方法Class.forName(“类名”);②调用对象的getClass()方法;③使用类名.class获取。对于基本数据类型,使用 类型名.class,比如 int.class。对于数组类型,使用 类名[].class获取,比如 int[].class。2)几项常用的反射功能:①对Class对象调用 getFields(),表示获取该类及其父类中声明为public的字段;而调用 getDeclaredFields(),表示获取该类中声明的所有字段(不原创 2020-07-28 11:15:31 · 175 阅读 · 0 评论 -
深入jvm 07. 垃圾回收(一)
1、GC是什么?为什么要有GC?垃圾指的是运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。GC(Garbage Collector) 是指回收堆中死亡对象所占据的空间。如果只分配内存空间,而不进行回收,那么内存迟早会被消耗完。另外,垃圾回收还可以清理内存碎片,将占用的堆内存移到堆的一端,这样在堆中空出连续的空闲内存空间。2、GC判定的方法方式一:引用计数法它的做法是为每个对象添加一个引用计数器,用来统计指向该对象的引用个数。对于一个对象A,如果有任何一个对象引用了A,则A的引用计数原创 2020-08-03 14:59:33 · 252 阅读 · 0 评论 -
深入jvm 07. 垃圾回收(二)垃圾收集器
垃圾收集器种类:新生代GC:Serial、ParNew、Parallel Scavenge老年代GC:Serial Old、Parallel Old、CMS整堆GC:G1组合关系:Serial Old是CMS失败的后备预案;jdk 8 将Serial+CMS、ParNer+Serial Old这两个组合声明为废弃,jdk 9 完全取消了这些组合的支持;jdk 14 弃用Parallel Scavenge+Serial Old组合,并删除了CMS GC。查看默认的垃圾收集器:① -XX:+原创 2020-08-03 15:09:47 · 276 阅读 · 0 评论
分享