Java7 和 Java8 堆内存的区别
Java7
Java8
JVM 默认占用内存的大小
JVM默认的初始占用内存大小 和 默认的最大占用内存大小
# JVM默认的初始占用内存大小 :宿主机的 1/64
# JVM默认的最大占用内存大小 :宿主机的 1/4
通过 java代码怎么查看 JVM 内存大小
public class Test {
public static void main(String[] args) {
long l = Runtime.getRuntime().maxMemory();//JVM最大占用内存
long l1 = Runtime.getRuntime().totalMemory();//JVM内存总量
System.out.println("max_memory="+l+"字节、"+(l/1024/1024)+"M");
System.out.println("total_memory="+l1+"字节、"+(l1/1024/1024)+"M");
}
}
# 测试机器为 8G 内存,我们可以看出,最大内存为1/4,当前占用的总内存(最小内存)为 1/64
通过 idea 怎么设置最大占用内存和最小占用内存
设置堆内存大小:
-Xms8m -Xmx8m
设置显示GC日志:
-XX:+PrintGCDetails
JVM 系统默认值的修改简写
# -Xms: 查看 初始堆 内存大小
# -Xmx: 查看 堆内存 的最大值
# -Xss: 查看 初始栈 空间的大小
JVM 的参数类型
# 标配参数:稳定的、一直都存在的参数
-version 、 -help 。。。
# X参数
-Xint:解释执行
-Xcomp:第一次使用就编译成本地代码
-Xmined:混合模式(java默认)【先编译、后解释】
# XX参数(重点)
Boolean类型:
公式: -XX:+ 【表示开启】
-XX:- 【表示关闭】
KV 设值类型:
公式: -XX:属性key=属性值value
标配参数
和X参数
的使用例子:
XX参数的
Boolean类型
的例子:
XX参数的
KV 设值类型
的例子:
使用jdk工具查看当前运行程序的配置信息【查看参数】
工具:
jsp
【查看进程】、jinfo
【查看配置信息】
1. 在终端执行 `jsp -l` 查看当前JVM的进程以及进程号
2. 在终端执行 `jinfo -flag 配置项 进程号` 查看具体配置项的详细信息
3. 在终端执行 `jinfo -flags 进程号` 查看此进程的所有的配置信息
# 两个经典的参数: -Xms 和 -Xmx 【也是 XX参数的kv类型 】
-Xms === -XX:InitialHeapSize
-Xmx === -XX:MaxHeapSize
直接使用参数来查看JVM的初始默认值
# 1.查看安装好jdk后,没有改变前的 JVM 的所有的配置信息
java -XX:+PrintFlagsInitial -version
示例:
# 2.主要查看修改更新后的配置信息内容
java -XX:+PrintFlagsFinal -version
示例:
# 3. 查看重要参数,以及GC垃圾回收器的类型
java -XX:+PrintCommandLineFlags
示例:
常用的基础参数之-Xss
# 设置单个线程栈的大小,一般默认为 512k~1024k,与生产平台有关【64位的Linux是1024k】
等价于:-XX:ThreadStackSize
常用的基础参数之 -Xmn
# 设置年轻代的大小
常用经典的参数 -XX:+PrintGCDetails
JDK 1.8版本
常用参数 -XX:MetaspaceSize
# 理论上在 java8 以后,元空间并不在虚拟机中,而是是使用本地内存的,所以元空间大小仅受本地内存大小限制
`但是`,MetaspaceSize 的大小只有21M左右。
为了防止MetaspaceSize的 OOM,我们通常会将 MetaspaceSize 设置的大一些
-XX:MetaspaceSize=1024m
常用典型的参数设置合集
# -Xms128m -Xmx4096m -Xss1024k -XX:MetaspaceSize=512m -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseSerialGC
常用参数 -XX:SurvivorRatio
常用经典的参数 -XX:NewRatio
常用经典的参数 -XX:MaxTenuringThreshold
# 进入老年代的年龄 默认是 15
垃圾最大年龄
我们可以看出默认大小为15
hreshold
# 进入老年代的年龄 默认是 15
垃圾最大年龄
[外链图片转存中…(img-XKKUBllK-1600787276596)]
[外链图片转存中…(img-0wlzxyJH-1600787276601)]
我们可以看出默认大小为15
[外链图片转存中…(img-PKFHYYyJ-1600787276603)]
java8 只能 0~15