Jvm
内存结构
垃圾回收
Jvm调优
虚拟机栈:方法内部局部变量
堆:对象
方法区:常量,静态变量,类信息,方法信息
-Xmx和-Xms应该维持什么样的比例?
首先并不是虚拟机内存越大就越好,大概原因是因为:内存越大,JVM 进行 Full GC 所需的时间越久,由于 Full GC 时 stop whole world 特性,如果是用于响应HTTP 请求的服务器,这个时候就表现为停止响应,对于需要低延迟的应用来说,这是不可接受的。对于需要高吞吐量的应用来说,可以不在乎这种停顿,比如一些后台的应用之类的,那么内存可以适当调大一些。(停顿时间越长,吞吐量反而越大),需要根据具体情况权衡。
-Xmx和-Xms一般都是设置相等的,避免在生产环境由于heap内存扩大或缩小导致应用停顿,也避免每次垃圾回收完成后JVM重新分配内存。当然如果生产系统上线前有一段预热时间的话,也可以不设置相等。
Java虚拟机的体系结构
·每个JVM都有两种机制:
①类装载子系统:装载具有适合名称的类或接口
②执行引擎:负责执行包含在已装载的类或接口中的指令
·每个JVM都包含:
方法区、Java堆、Java栈、本地方法栈、指令计数器及其他隐含寄存器