• 深入理解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异常

    堆:在堆中创建对象。

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

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

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

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

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

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

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

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

    基本类型存在哪里?

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

     

  • 相关阅读:
    Linux命令之压缩zip
    MySQL笔记-05 数据表操作
    Leetcode543. 二叉树的直径
    华为云14天鸿蒙设备开发-Day9网络应用开发
    MySQL中的日志“binlog”的三种格式这么好玩
    Flex & Bison 开始
    注意力屏蔽(Attention Masking)在Transformer中的作用 【gpt学习记录】
    uniapp支付之APP微信支付unicloud版(附源码)
    普通人不要去投资
    WebSocket实现前后端双向数据的实时推送
  • 原文地址:https://blog.csdn.net/weixin_44151292/article/details/126494849