Java之JVM知识点整理

2019-08-16 15:14:49 浏览数 (1)

昨天的排版并不是很满意,而且每天公众号只能发布一篇文章,近期资料看了很多,需要复习巩固一下,在群里,私聊小伙伴问了很多问题,今天都得到了解决。

[昨天好奇哈,就像试试countdownLatch容量改为Integer.MaxValue会不会崩。结果了,并不会,只是最大值为2147483647换算为秒大概66年,估计服务器会睡着]

JVM:Java Virtual Machine

什么是JMM?java memory model java内存模型

一提到JVM就不得不提JVM调优,GC垃圾回收

(一)GC垃圾回收

什么是垃圾?

垃圾:已经不再被内存使用到的空间

2.如何确定垃圾?

引用计数法,可达性分析算法

3.GC算法?

引用计数法/ 可达性分析算法

复制算法:新生区,浪费空间

标记清除:老年区,内存碎片

标记压缩:老年区,移动对象

(二)JVM的系统参数

标配参数

X参数

XX参数:Boolean类型 -表示是否开启,KV型

JVM 系统默认值

Xms Xmx 做好调成一致 避免GC频繁收集 忽高忽低

-XX: PrintGCDetails:开启打印GC细节

-XX: UseSerialGC:开启串行收集

-XX: PrintDFlagsInitial

jinfo -flag *** pid

-XX:MetaspaceSize:元空间大小

-Xss:单个线程大小跟随系统

Docs.oracle.com

4.强引用,软引用,弱引用,虚引用

(三)OOM :java.lang.outofmemoryError

java.lang.StackOverflowError

java.lang.outofmemoryError :java heap space

java.lang.outofmemoryError :GC overhead limit exceeded

java.lang.outofmemoryError :Direct buffer memory

java.lang.outofmemoryError:unable to create new native thread

java.lang.outofmemoryError Metaspace

demo:

package com.kk;/** * @author zhaokk * @create 2019-05-21-21:56 */

public class StackOverFlowDemo {

public static void main(String[] args) { stackOverFlow(); }

private static void stackOverFlow() {

stackOverFlow(); }

}

Exception in thread "main" java.lang.StackOverflowError at com.kk.StackOverFlowDemo.stackOverFlow(StackOverFlowDemo.java:14) at com.kk.StackOverFlowDemo.stackOverFlow(StackOverFlowDemo.java:14) at com.kk.StackOverFlowDemo.stackOverFlow(StackOverFlowDemo.java:14) at com.kk.StackOverFlowDemo.stackOverFlow(StackOverFlowDemo.java:14) at com.kk.StackOverFlowDemo.stackOverFlow(StackOverFlowDemo.java:14) at com.kk.StackOverFlowDemo.stackOverFlow(StackOverFlowDemo.java:14)

递归层次太深

垃圾回收器:

并发 串行 并发标记 G1 java12(ZGC)

1、多数的Java应用不需要在服务器上进行GC优化;

2、多数导致GC问题的Java应用,都不是因为我们参数设置错误,而是代码问题;

3、在应用上线之前,先考虑将机器的JVM参数设置到最优(最适合);

4、减少创建对象的数量;

5、减少使用全局变量和大对象;

6、GC优化是到最后不得已才采用的手段;

7、在实际使用中,分析GC情况优化代码比优化GC参数要多得多

https://www.cnblogs.com/csniper/p/5592593.html

在不止一次问了如何配置之后终于自己操作后解决

---maven package

内部通过vm option配置

外部命令 java -server XX: printGCDetail -jar packagename

0 人点赞