• 深入理解Java虚拟机笔记-1、2章


    第一章 走进Java

    虚拟机一般指虚拟出来的电脑,Java虚拟机指虚拟出来的Java环境,也叫Java运行是占据的空间。

    Java虚拟机家族:

    虚拟机始祖:Sun Classic/Exact VM

    武林盟主:HotSpot VM

    小家碧玉:Mobile/Embedded VM

    天下第二:BEA JRockit/IBM J9 VM

    软硬合璧:BEA Liquid VM/Azul VM

    挑战者:Apache Harmony/Google Android Dalvik

    没有成功,但并非失败:Microsoft JVM及其他

    新一代即时编译器:

    自JDK 10起,HotSpot中又加入了一个全新的即时编译器:Graal编译器。

    Graal编译器是以C2编译器替代者的身份登场的。

    Graal编译器本身就是由Java语言写成,实现时又刻意与C2采用了同一种名为“Sea-of-Nodes”的高级中间表示(High IR)形式,使其能够更容易借鉴C2的优点。开发效率和扩展性上都要显著优于C2编译器。

    自己编译JDK:

    文件本质是比特数组(比特流),识别字符编码翻译成底层的C语言,并判断语言的正确性。

    第二章 java内存区域与内存溢出异常

    2.2 运行时数据区域

    方法区:类第一次使用从磁盘加载到内存先进入方法去。

    虚拟机栈:方法执行是在栈中创建线程栈,把方法压栈,变量的句柄也在栈中。

    每个线程压入方法就是栈帧,java虚拟机栈也是线程私有的,它的生命周期

    与线程相同。

            单个线程栈空间不够:抛出StackOverflowError异常

            整个栈、堆空间不够:抛出OutOfMemoryError异常

    堆:在堆中创建对象。

    对象实例在这里分配内存。//缓冲区:先申请足够大空间

    本地方法栈:不管什么语言都要翻译成操作系统识别的语言,调用操作系统内核的方法。

    程序计数器:虚拟机线程什么时候入栈,什么时候出栈,需要它来记录。

    辅助线程栈,记录正在执行的指令的地址。

    ----------------------------------------------------

    线程隔离:某一信息只属于一个线程。

    线程共享:多线程可以修改访问同一个变量或方法。

    *分为方法区、堆、虚拟机栈、本地方法栈、程序计数器五个部分,其中方法区和堆是线程共享的,其他是线程隔离的。

    基本类型存在哪里?

    方法中声明的存在栈中,类中(方法外)声明的存在堆中,静态的基本类型存放在方法区。

     

  • 相关阅读:
    Typescript 函数类型详解
    Mempool Library
    什么程度才算精通 Linux?
    【C语言】字符串函数及模拟实现strlen&&strcpy&&strcat&&strcmp
    C语言经典面试题目(十四)
    ArrayList分析2 :Itr、ListIterator以及SubList中的坑
    TiDB Lightning 简介
    算法的时间复杂度
    【Python零基础入门篇 · 1】:print()函数的使用和转义字符、原字符总结
    【Pygame】 游戏开发 基础知识
  • 原文地址:https://blog.csdn.net/weixin_44151292/article/details/126494849