JVM札记

作者: 躁动的中年大叔 | 来源:发表于2019-05-09 15:45 被阅读0次

JVM参数

-Xmx:最大堆内存大小,默认为物理内存的1/4
-Xms:初始化堆大小,默认为物理内存的1/64
-Xmn: 年轻代的大小
-XX:NewRatio:老年代和年轻代的比例,默认为2,即老年代占用的堆空间是新生代的2倍。即新生代占用1/3,老年代占用2/3。
-XX:NewSize:定义初始新生代的大小,堆中的剩余大小即是老年代的大小。
-XX:MaxNewSize:定义最大新生代的大小,堆中的剩余大小即是老年代的大小。
-Xss:每个线程的堆栈大小
栈的深度跟每个线程的堆栈大小、方法的局部变量表的大小有关。堆栈越大,栈的深度越深,局部变量表越大,栈的深度越小。

-XX:MaxPermSize:方法区的大小
-XX:MaxTenuringThreshold:设置年轻代对象的最大年龄,若为0,则年轻代对象不经过Survivor区,直接进入老年代。

JVM生命周期

  1. JVM实例对应了一个独立运行的java程序它是进程级别

a) 启动。启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点

b) 运行。main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,java程序也可以标明自己创建的线程是守护线程

c) 消亡。当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退出

  1. JVM执行引擎实例则对应了属于用户运行程序的线程它是线程级别的

对象的创建

  1. 检查对象对应的类是否已经加载、解析和初始化,如果没有则执行相应的类的加载过程。
  2. 为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定。
  3. 虚拟机将分配到的内存空间初始化为零值。
  4. 对对象进行必要的设置。(对象是哪个类的实例、如何能找到类的元数据信息、对象的hash码、对象的GC分代年龄等信息)
  5. 执行<init>方法。

相关文章

网友评论

      本文标题:JVM札记

      本文链接:https://www.haomeiwen.com/subject/wynziftx.html