zoukankan      html  css  js  c++  java
  • JVM宏观认知&&内存结构

    JVM宏观认知

    1.什么是虚拟机?

    虚拟机是一种软件

    可分为系统虚拟机(仿真物理机)和程序虚拟机(执行单个计算机程序,比如JVM)。


    2.什么是Java虚拟机(JVM)?

    JVM是一种将字节码转化为机器码的软件。(同上)

    历经时间的迭代,目前广泛应用的Java虚拟机是Oracle的HotSpot VM。


    3.JVM有什么用?

    • 理论:加深对Java底层运行机制的了解和认知
    • 实践:自定义性能更强的JVM(参数调优),排查由于Java应用本身导致的线上问题(调优主要是调堆)

    JDK的发布版本了解一下

    • 1991.4 :Java语言前身Oak诞生

    • 1995.5:Oak语言改名为Java

    • 1996.1:JDK1.0发布,代表技术包括JVM,Applet,AWT
      • Applet是一种Java程序,需要嵌入在HTML中解释执行
      • AWT是早期的抽象窗口工具包,目前流行的有Swing,JavaFx

    • 1997.2:JDK1.1发布,代表技术有JAR文件格式,JDBC,内部类,反射

    • 2002.2:JDK1.4发布,新的技术有正则表达式,NIO,日志类
      • 正则表达式是对字符串操作的一种逻辑格式
      • NIO在IO的基础上增加了缓冲区,是一种非阻塞式的IO模型

    • 2004.9:JDK1.5发布,新的技术有自动装箱,泛型,注解,枚举,foreach循环

    • 2006.11:Sun公司宣布将Java开源,并建立了OpenJDK组织对源码进行管理。

    • 2009.4:Oracle以74亿美元收购Sun公司。

    • 2014.3:Oracle发布JDK1.8,新的特性有Lambda表达式,Stream API

    • 2017.9:JDK9发布,新特性有模块化系统,可交互的REPL工具,JIT,JVMCI等等

    • 2018.3:JDK10发布,新特性包括JEP286局部变量的类型推断,JEP317向G1引入Full GC

    • 2018.9:JDK11发布,新特性包括基于嵌套的访问控制,JavaFx被移除【JDK1.8有】

    • 2019.3:JDK12发布,新特性有低暂停时间的GC,微基准测试套件,Switch表达式。

    ......



    JVM内存结构

    JVM内存结构也称为「运行时数据区」。


    线程公有:

    • Java堆:存放Java实例对象,生命周期和JVM一致
    • 方法区:存储已被虚拟机加载的类信息、final修饰的常量、static修饰的静态变量。
    • 运行时常量池:是方法区的一部分,存放字面量与符号引用。
      • 字面量可以理解为实际值,int a = 8中的8 和 String a = "hello"中的hello都是字面量
      • 符号引用是一个字符串,对应唯一的类,方法,或者字段。

    线程私有:

    • 程序计数器:每个线程都有一个程序计数器,就是一个指针,指向方法区中的方法字节码(下一个将要执行的指令代码),由执行引擎读取下一条指令
    • 虚拟机栈:描述Java方法执行的过程内存是如何变化的。
      • 每执行一个方法就会往栈中压入一个元素,这个元素叫“栈帧”用于存储局部变量表栈的出入信息以及方法出口信息等。
      • 生命周期和线程相同,线程结束自动释放内存,不需要垃圾回收。
    • 本地方法栈:为虚拟机使用到的Native方法服务。Native底层是C语言编写的,用于和操作系统交互。
  • 相关阅读:
    [ZJOI2013]K大数查询 浅谈整体二分
    2019暑假杭二day1测试总结
    2019暑假杭二day2测试总结
    2019暑假杭二day3测试总结
    2019暑假杭二day4测试总结
    2019暑假杭二day5测试总结
    一些有趣的教学视频
    karatsuba乘法
    多项式求逆元
    FFT
  • 原文地址:https://www.cnblogs.com/noneplus/p/11440694.html
Copyright © 2011-2022 走看看