JVM 虚拟机常识

1、什么是JAVA虚拟机
所谓虚拟机,就是一台虚拟的计算机。他是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的 VisualBox、VMware就属于系统虚拟机。他们完全是对物理计算机的仿真。提供了一个可以运行完整操作系统的软件平台。
程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。
2、JAVA 如何做到跨平台
同一个JAVA程序(JAVA字节码的集合),通过JAVA虚拟机(JVM)运行于各大主流操作系统平台
比如Windows、CentOS、Ubuntu等。程序以虚拟机为中介,来实现跨平台。

3、虚拟机基本结构–了解
在这里插入图片描述

我们要对JVM虚拟机的结构有一个感性的认知。毕竟我们不是编程人员,认知程度达不到那么深入。

1、类加载子系统

负责从文件系统或者网络中加载编译好的.class字节码文件,加载的类信息存放于一块称为方法区的内存空间。

2、Java堆

在虚拟机启动的时候建立,它是Java程序最主要的内存工作区域。几乎所有的Java对象实例都放Java堆中。

3、Java的NIO库(直接内存)

允许Java程序使用直接内存。直接内存是在Java堆外的、直接向系统申请的内存空间。但是系统内存是有限的,Java堆和直接内存的总和依然受限于操作系统能给出的最大内存。

4、垃圾回收系统

垃圾回收系统是Java虚拟机的重要组成部分,垃圾回收器可以对方法区、Java堆和直接内存进行回收。

5、执行引擎

是Java虚拟机最核心组件之一,它负责执行虚拟机的字节码。使用即时编译技术将方法编译成机器码后再执行。

4、虚拟机堆内存结构
在这里插入图片描述

JVM中堆空间可以分成三个大区,年轻代、老年代、永久代(方法区)。

1、年轻代

所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集那些生命周期短的对象。年轻代分为三个区域:EDEN、Survivor 0(简称S0,也通常称为from区)、Survivor 1(简称S1,也通常称为to区)。其中S0与S1的大小是相同等大的。我们不必去纠结此比例(可以通过修改JVM某些动态参数来调整)的大小.只需谨记三点就好:
1、S0与S1相同大小。
2、EDEN区远比S(S0+S1)区大,EDEN占了整个年轻代的大致70%至80%左右。
3、年轻代分为2个区(EDEN区、Survivor区)

2、老年代

在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。

那一个对象到底要经过多少次垃圾回收才能从年轻代进入老年代呢?
我们通常认为在新生代中的对象,每经历过一次GC(垃圾回收),如果它没有被回收,它的年龄就会被加1, 虚拟机提供了一个参数来可控制新生代对象的最大年龄:MaxTenuringThreshold。默认情况下,这个参数是15。 也就是说,在新生代的对象最多经历15次GC,就可以进入老年代。

3、永久代(方法区)

也通常被叫做方法区。存放JDK自带的class,interface,Meta信息。

5、常用的JVM参数

接下来我们主要聊聊常用的JVM参数。

1、跟踪JAVA虚拟机的垃圾回收

开启gc日志

shell
-XX:+PrintGC #开启gc日志
-XX:+PrintGCDetails #打印gc日志的详细信息
-XX:+PrintGCTimeStamps #打印gc日志的时间戳
-Xloggc:filename #gc日志的路径与名字

在这里GC 日志格式支持 %p 和 %t 两个参数:

%p 将会被替换为对应的进程 PID
%t 将会被替代为时间字符串,格式为: YYYY-MM-DD_HH-MM-SS

开启gc日志

shell
-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/logs/gc-%t.log"

2、配置JAVA虚拟机的堆空间

1.设置java堆空间:两个值默认为物理内存64/1
-Xms:初始堆大小
-Xmx:最大堆大小
实际生产环境中, 我们通常将初始化堆(-Xms) 和 最大堆(-Xmx) 设置为一样大不超过物理内存的一半。以避免程序频繁的申请堆空间。

[root@qfedu.com bin]# vim catalina.sh 添加
JAVA_OPTS=“-server -Xms2048m -Xmx2048m -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/logs/gc-%t.log”
[root@qfedu.com ~]# mkdir /data0/logs/ -p #创建gc日志存放路径

2.重启tomcat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值