一、什么是jvm

jvm是JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际
的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用
Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在
多种平台上不加修改地运行。

二、jvm三种运行参数

标准参数

很稳定的参数,在未来的jvm版本中也不会改变的命令,比如:-help、-version、-server、-client

-X参数(非标准参数)

非标准参数,在不用的jvm版本中,参数可能会不同,可以通过java -X 查看所有非标准参数
比如-Xint、-Xcomp、-Xmixed,这三个参数是设置运行模式的
-Xint:会强制jvm执行所有的字节码,运行速度会大幅度降低
-Xcomp:会在jvm第一次运行时把所有字节码编译成本地代码,从而代码最大程度的优化,但是他不会启用JIT编译器的全部功能,
		Jit编译器可以对是否需要编译做出判断,如果所有代码都需要进行编译的话,那么那些执行一次的代码就会一直编译
-Xmixed:是混合模式,由jvm自己决定使用哪种模式,是jvm默认选择也是推荐使用的模式

-XX参数(常用)

是非标准参数,也是jvm的调优和debug的经常使用的参数。-XX参数有两种使用方式,一种是boolean类型,一种是非boolean类型
boolean类型:-XX[+-],比如 -XX:+DisableExplicitGc 表示禁用手动调用gc操作,也就是说调用System.gc()无效。
非boolean类型:-XX: 比如-XX:NewRatio表示新生代和老年代的比值

-Xms、-Xmx参数

-Xms是设置jvm堆的初始大小,具体用法为-Xms64m,等价于-XX:InitialHeapSize
-Xmx是设置jvm堆得最大大小,具体用法为-Xmx128m,等价于-XX:MaxHeapSize
**适当的调整jvm的内存大小,可以充分利用服务器资源,让程序跑得更快!**

三、堆内存模型

jdk1.7的堆内存模型

  • 年轻(Young)代:年轻代被分为三个部分,Eden区和两个大小一样的Survivor区域,同一时刻只有一个Survivor被使用,另外一个留作垃圾收集时复制对象使用,在Eden区满了之后,GC就会将存活的对象移到空闲的Survivor区中,根据jvm的策略,经过了几次垃圾收集之后,依然存活在Survivor中的对象将被移动到Tenured中。
  • 老年(Tenured)代:老年代主要保存生命周期长的对象,一般是一些比较老的对象。
  • 永久(perm)代:永久代主要保存class、method、field对象,这部分的空间一般不会溢出,除非一次加载了很多的类。
  • virtual区:最大内存和初始内存的差值,就是Virtual区域。

jdk1.8的堆内存

跟1.7最大的区别就是永久代(perm)代用Metaspace(元数据空间)进行了替换。并且元数据空间是占用本地内存的,而非虚拟机内存。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐