随笔分类 - JVM
摘要:通过之前的学习,我们知道:类加载就是根据一个类的全限定名,将其字节码文件 加载到JVM内部,并创建java.lang.Class对象实例。其实,一个类的加载过程应包括:加载,连接(验证,准备,解析),初始化。 加载: 通过类加载器,根据一个类的全限定名,将该类的字节码文件加载到JVM中(存储在方法区
阅读全文
摘要:在程序中实现一个自定的类加载器:继承ClassLoader抽象类,重写findClass()。 如下位一个实例代码: 输出结果: 总结: 1.为什么要自定义类的加载器??? 通过自定义的类加载器,我们可以进行一些额外的操作,比如可以对字节码文件进行加密,解密。这就保护了原始字节码的安全性问题。 2.
阅读全文
摘要:通过之前的学习我们了解到了常见的三种类加载器:BootstrapClassLoader,ExtClassLoader,APPClassLoader,以及用户也可通过继承ClassLoader抽象类重新写findClass()来自定义类加载器。那么在类的加载中,怎么保证类的全局唯一性???在JVM中我
阅读全文
摘要:在学习类加载机制之前,我们先了解一下类加载器,因为类加载器是类加载机制的前提。类加载器的主要任务就是:根据一个类的全限定名,将该类的字节码文件加载进JVM中,然后转换为一个对应类的Java.lang.Class对象实例。程序员也可以自定义类加载器,一般的将派生于抽象类ClassLoader的类加载器
阅读全文
摘要:当我们了解完垃圾回收算法后,我们正式的一起来的JVM到自动内存管理工具的实现 即GC(即可完成内存分配,也可进行垃圾回收)。我们会了解到一些常见的GC版本,比如:Serial/Serial Old收集器,Parallel/Parallel Old收集器,CMS(Concurrent Mark Swe
阅读全文
摘要:本文主要了解三种常用的垃圾收集算法: 1.标记-清除算法(Mark Sweep): 此过程分为两个步骤:垃圾标记,垃圾清除。该算法相比于其他两个算法:执行效率低下,还容易产生内存碎片。 但是由于老年代的生命周期比较长,使用复制清除算法操作的对象会比较多,所以老年代会使用标记清除算法。但是由于内存空间
阅读全文
摘要:1.GC的作用: GC(Garbage Collection)就是JVM中自动内存管理机制的具体实现。GC包括两大功能:内存的分配,垃圾的回收。内存的分配上一文章中已经介绍过,因为对象生命周期的差异性,故采使用分代垃圾回收策略。 那么如何评价一款GC的性能优劣呢???主要有如下的几个标准 2.垃圾的
阅读全文
摘要:之前有提到过,为了提高GC的回收效率,对象实例的内存分配不一定必须存在于堆区中,还可采用堆外分配。而最常见的堆外分配就是采用逃逸分析筛选出未发生逃逸的对象,在栈帧中分配内存空间。 逃逸分析:就是分析出对象的作用域。当一个对象在方法体内声明后,该对象的引用被其他外部所引用时该对象就发生了逃逸,反之就会
阅读全文
摘要:1.JVM的三种引用类型: 之前介绍过,为了提高GC的执行效率Java的实例对象也可以创建在堆区之外,但是绝大多数的实例对象还是创建在了堆区中。在JVM中包含三种引用类型即:类类型(class type),数组类型(array type),接口类型(interface type),这些引用类型的对象
阅读全文
摘要:前言:在学习Java第一课时,老师就讲到:Java不同于C/C++的手动内存分配与回收。原来这都得益于JVM的内存自动管理机制,但是在这背后又暗藏什么玄机呢???本人从图书馆借来了《Java虚拟机精讲》来一探究竟。 一.JVM的内存模型: 如下图所示可以分为5个模块:堆,栈,本地方法栈,PC寄存器,
阅读全文
摘要:1.创建一个对象有三个阶段:加载,链接,初始化。以上示例说明:静态变量在加载的时候被加载进内存,链接时给静态变量赋初始值为0,在初始化阶段有JVM调用clinit()方法来按顺序合并静态代码块。 2.测试什么情况下类会被加载:new 对象;调用父类的静态变量; 3.获得类加载器: 主要方法: cla
阅读全文

浙公网安备 33010602011771号