zoukankan      html  css  js  c++  java
  • JVM学习笔记

    JVM学习笔记(一)—基本结构

    • 标签:
    • jvm
    • 1.什么是java 虚拟机,什么是java 的虚拟机实例?

    java的虚拟机相当于我们的一个java类,而java虚拟机实例,相当我们new一个java类,不过java虚拟机不是通过new这个关键字而是通过java.exe或者javaw.exe来启动一个虚拟机实例。

    2.JVM的生命周期?

    java虚拟机的生命周期,当一个java应用main函数启动时虚拟机也同时被启动,而只有当在虚拟机实例中的所有非守护进程都结束时,java虚拟机实例才结束生命。

    3.java虚拟机的体系结构

    .类加载器(用来装载.class文件)

    .执行引擎(执行字节码,或者执行本地方法)

    .运行时数据区(方法区.堆.java栈.pc寄存器.本地方法栈)


    4.jvm的组成部分解析

    JVM中的内存主要划分为:方法区、堆区、java虚拟机栈、本地方法栈、程序计数器(PC寄存器)五个部分。

    1.方法区:也称”永久代”,用于存储已经加载的类信息,常量,静态变量以及方法代码。方法区内存大小默认最小值为16MB,最大值为64MB。 
    运行时常量池:是方法区的一部分,用于存储常量和类中的符号引用。 
    (符号引用:指类名,方法名,字段名等,这些引用就像人的身份证号码一样只能用于区分某一个人。 直接引用:类解析时会将这些符号引用转为直接引用,直接引用就指为它们在方法区内存中分配的地址)

    2.堆区:用于存放类的对象实例。JVM中最大的一块内存,堆内存由JVM启动时创建好,堆大小由参数-Xms和-Xmx设置。 
    *:-Xms为JVM启动时申请的最小内存,默认为操作系统物理内存的1/64但不超过1G。-Xmx为JVM可以申请的最大内存,默认为操作系统物理内存的1/4但不超过1G。 
    *:当空余堆内存低于40%时,JVM会增大堆内存到-Xmx指定的大小,当空余堆内存超过70%时,JVM会减小堆内存到-Xms指定的大小。

    堆区按存放对象的时间不同又划分为新生代,老年代和永恒代。 
    新生代(Young):程序新创建的对象都是从新生代分配内存。可通过-Xmn指定新生代的大小。新生代由Eden和两块相同大小的From,To构成。

    老年代(Old):用于存放经过多次新生代GC仍然存活的对象。新建的对象也可能直接进入老年代,比如大对象(可通过参数指定)和大的数组对象。

    永恒代(Perment):存放类的Meta信息。

    3.Java虚拟机栈:也叫栈区。是由一个个栈帧组成的后进先出的栈式结构,栈帧中存放方法运行时的局部变量、方法出口等信息。当调用一个方法时,就会在虚拟机栈中创建一个栈帧用于存放这些数据,方法调用完时栈帧消失。若方法中又调用了其他方法,则继续在栈顶创建新的栈。

    4.本地方法栈:与虚拟机栈类似,区别是本地方法栈是为Native方法服务的,而java虚拟机栈是为java方法服务的。

    5.程序计数器:最小的一块内存。通过改变计数器的值来选取下一条需要执行的字节码指令。

    其他: 
    1.JVM中堆内存是程序直接能使用的内存,而其他区域内存(方法区/栈区/程序计数器/本地方法栈)是JVM自己使用的,所以也将JVM中内存划为堆区和非堆区(除堆之外的其他内存)。 
    2.非堆区内存由参数-XX:PermSize和-XX:MaxPermSize指定。前者指定最小的内存大小,后者指定最大的内存大小。 
    3.程序运行时,JVM会向操作系统申请一块内存,内存的一部分作为堆内存使用,一部分作为非堆内存使用。

  • 相关阅读:
    Java实现 LeetCode 735 行星碰撞(栈)
    Java实现 LeetCode 735 行星碰撞(栈)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 蓝桥杯算法提高 求最大值
    Java实现 蓝桥杯算法提高 求最大值
    Java实现 蓝桥杯算法提高 求最大值
    Python eval() 函数
    Python repr() 函数
  • 原文地址:https://www.cnblogs.com/dgj15222301178/p/7840343.html
Copyright © 2011-2022 走看看