zoukankan      html  css  js  c++  java
  • 关于JVM的简记

    一、JVM的概念:

    java virtual machine、java虚拟机,是一种用于计算设备的规范,jvm是实现java语言的平台无关性的关键。

    二、JVM的功能:

    1)通过 ClassLoader 寻找和装载 class 文件。
    2)释放字节码成为指令并执行,提供 class 文件的运行环境。
    3)进行运行期间垃圾回收。
    4)提供与硬件交互的平台:虚拟机是运行在操作系统之上的,不与硬件交互,所以说提供了平台。

    三、JVM内存结构:

    1)类加载子系统classloader:负责从文件系统或者网络加载class信息。

    内存空间:

    2)方法区:各个线程共享的区域,存放类信息、常量信息、常量池信息、编译器编译后的代码等等。

    3)java堆:线程共享的区域,在JVM启动时建立java堆,它是java程序最主要的内存工作区域,几乎所有的对象实例都存放到java堆中。因为其实例产生量大,因而java堆的空间也是内存里最大的。如果java堆空间不足,程序会抛出OutofMemoryError异常。

    4)java栈:线程私有的区域:每个JVM都有一个私有的栈,其生命周期与线程相同,一个线程的java栈在线程创建的时候就被创建。java栈中保存着局部变量、方法参数、同时java的方法调用、返回值等。每执行一个方法就会往栈中压入一个元素,这个元素叫做“栈帧”,每个栈帧代表一个方法,(return,异常抛出这两种返回方式都会导致该方法的帧出栈和释放内存。)。如果java栈的空间不足,程序会抛出StackOverflowError异常。(一般来说,递归容易引起java栈溢出的问题。)

    5)本地方法栈和java栈类似,都是线程私有的区域。最大的不同是本地方法栈用于本地方法调用。java虚拟机允许java直接调用本地方法。
    6)PC寄存器:Program Counter寄存器,线程私有。jvm会为每个线程创建PC寄存器,在任何时刻,一个java线程总是在执行一个方法,这个方法被称为当前方法,如果当前方法不是本地方法,PC寄存器会指向当前正在被执行的指令,如果是本地方法,则PC寄存器值为undefined,寄存器存放如当前执行环境指针,程序计数器,操作栈指针,计算的变量指针等信息。【程序计数器应该就是我们所说的PC寄存器】

    7)执行引擎:根据PC寄存器调配的指令顺序,依次执行程序指令。

    四、JVM的一些参数配置:

    JVM参数配置:-Xms1G -Xmx2G -Xmn500M -XX:MaxPermSize=64M -XX:+UseConcMarkSweepGC -XX:SurvivorRatio=3
    1)-Xms1G:设置JVM起始内存为1G,此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
    2)-Xmx2G:设置JVM最大可用内存为2G。
    3)-Xmn500M:设置新生代内存大小为500M。
    4)-XX:MaxPermSize=64M:设置持久代大小为64M。
    5)-XX:+UseConcMarkSweepGC:设置并发收集器
    6)-XX:SurvivorRatio=3:新生代中又会划分为 Eden 区,from Survivor、to Survivor 区。其中 Eden 和 Survivor 区的比例默认是 8:1:1,当然也支持参数调整 -XX:SurvivorRatio=3的话就是3:1:1。

  • 相关阅读:
    modprobe命令
    CentOS实验七:配置RPMForge软件源
    Makefile中的cd用法
    shell 脚本重定向【转】
    自动登陆CentOS
    用UltraISO制作启动光盘
    解决PATH中没有/sbin目录的问题
    Linux系统信息命令大全
    隐藏CentOS桌面图标
    IIS 操作必须使用一个可更新的查询的解决方法
  • 原文地址:https://www.cnblogs.com/yangrongkuan/p/12023616.html
Copyright © 2011-2022 走看看