美文网首页
《深入理解Java虚拟机》

《深入理解Java虚拟机》

作者: 毕安 | 来源:发表于2018-05-15 16:35 被阅读0次

    第一章 走进java

    1、java的优点

    它摆脱了硬件平台的束缚,实现了“一次编写,到处运行”的理想;它提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界的问题;它实现了热点代码检测和运行时编译及优化,这使得Java应用能随着运行时间的增加而获得更高的性能;它有一套完善的应用程序接口,还有无数来自商业机构和开源社区的第三方类库来帮助它实现各种各样的功能。Java所带来的这些好处使程序的开发效率得到了很大的提升。

    2、JDK

    我们把Java程序设计语言、Java虚拟机和Java API类库这三部分统称为JDK(Java Development Kit),JDK是用于支持Java程序开发的最小环境。

    第二章 自动内存管理机制

    1、运行时数据区域

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。


    Java虚拟机运行时数据区

    划分为五个区域,包括:方法区、堆、虚拟机栈、本地方法栈、程序计数器。方法区和堆是由所有线程共享的数据区,其他三个为线程独有。

    2、对象的创建

    ①虚拟机遇到一条new指令时,首先将去检查这个指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。
    ②在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后可以完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。
    ③内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值(不包括对象头),如果使用TLAB,这一工作过程也可以提前到TLAB时进行。这一操作保证了对象的实例字段在java代码中可以不赋初始值就直接使用,程序能访问到这些字段的数据类型所对应的零值。
    ④接下来,虚拟机要对对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的云数据信息、对应的哈希码、对应的GC分代年龄等信息。这些信息存放在对象的对象头之中。
    ⑤执行init方法

    3、可达性分析算法

    通过可达性分析算法来判定对象是否存活。
    这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为“引用链(Reference Chain)”,当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的,即是可以回收的对象。(两次标记过程宣告死亡)
    在java语言中,可作为GC Roots的对象包括以下几种:

    • 虚拟机栈(栈帧中的本地变量表)中引用的对象。
    • 方法区中类静态属性引用的对象。
    • 方法区中常量引用的对象。
    • 本地方法栈中JNI(即一般说的Native方法)引用的对象。

    相关文章

      网友评论

          本文标题:《深入理解Java虚拟机》

          本文链接:https://www.haomeiwen.com/subject/mnrddftx.html