zoukankan      html  css  js  c++  java
  • JVM虚拟机

    一、JAVA虚拟机内存模型:

    1、程序计数器:非常小的内存,用于存放下一条运行的指令;

      每一个线程都必须有一个独立的程序计数器,用于记录下一条要运行的指令,是一块线程私有的内存空间,CPU时间切片

    2、虚拟机栈:与线程同时创建,也是线程私有内存空间,保存方法的局部变量,部分结果,并参与方法的调用与返回

      异常:StackOverflowError, OutOfMemoryError, 通过设置虚拟机栈大小-Xss2M,栈越大,函数调用次数越多,对于一个函数来说,他的参数越多,内部变量越多,函数调用次数就越少。

      使用栈帧方式进行保存的,进栈与出站,栈帧结构【局部变量表、操作数栈、动态连接方法、返回地址】

    3、本地方法栈:用于存放函数调用堆栈信息

    4、JAVA堆(空间):所有线程共享,用于存放JAVA程序运行时所需的对象等数据(对象、数组)

      被划分为新生代和老年代两部分

      Eden:对象出生地

      S0,S1 Survivor经历过GC回收后的

      老年代:tenured,经过多次GC回收的

    5、方法区: 所有线程共享,用于存放程序的类元数据信息,类的类型信息(类名、父类名、修饰符、直接接口),常量池,域信息,方法信息。也叫永久区,是一块独立于Java堆的内存空间。也是要回收的,只是回收与堆不同。

    二、JVM内存分配参数

    1、设置最大堆内存:

      -Xmx最大堆指的是新生代和老年代的大小之和的最大值

    2、设置最小堆内存:

      -Xms JVM会试图将系统内存尽可能限制在-Xms中,当内存实际使用量触及到-Xms大小时,会触发Full GC。

      如果-Xms值比较大时,系统运行初期较少GC的次数和耗时。

    3、设置新生代大小

      -Xmn

      hot Spot:-XX:NewSize新生代初始大小和-XX:MaxNewSize

      设置一个较大的新生代会减少老年代大小

    4、设置持久代:不属于堆的一部分

      持久代的大小直接决定了系统可以支持多少个类定义和多少常量。

      -XX:PermSize设置持久代的初始大小,-XX:MaxPermSize

    5、堆的比例分配

      -XX:SurvivorRatio设置新生代中eden空间与S0,S1比例关系

      -XX:NewRatio 设置新生代和老年代的比例

  • 相关阅读:
    【python之路39】Python 正则表达式
    【html、CSS、javascript-4】新特征之增强表单
    node调试工具--node-inspector安装
    node多版本管理--nvmw
    transform的影响
    HTML5 input事件检测输入框变化[转载]
    mysql5.7.16安装 初始密码获取及密码重置
    undefined 与void 0
    html 自定义标签使用实现方法
    图片轮播滚动
  • 原文地址:https://www.cnblogs.com/TheoryDance/p/10279543.html
Copyright © 2011-2022 走看看