jvm基础知识

一、什么是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(元数据空间)进行了替换。并且元数据空间是占用本地内存的,而非虚拟机内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_67392811

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值