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生命周期
- JVM实例对应了一个独立运行的java程序它是进程级别
a) 启动。启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点
b) 运行。main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,java程序也可以标明自己创建的线程是守护线程
c) 消亡。当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退出
- JVM执行引擎实例则对应了属于用户运行程序的线程它是线程级别的
对象的创建
- 检查对象对应的类是否已经加载、解析和初始化,如果没有则执行相应的类的加载过程。
- 为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定。
- 虚拟机将分配到的内存空间初始化为零值。
- 对对象进行必要的设置。(对象是哪个类的实例、如何能找到类的元数据信息、对象的hash码、对象的GC分代年龄等信息)
- 执行<init>方法。
网友评论