Java之JVM知识点整理

举报
赵KK日常技术记录 发表于 2023/06/24 16:05:45 2023/06/24
【摘要】 昨天的排版并不是很满意,而且每天公众号只能发布一篇文章,近期资料看了很多,需要复习巩固一下,在群里,私聊小伙伴问了很多问题,今天都得到了解决。[昨天好奇哈,就像试试countdownLatch容量改为Integer.MaxValue会不会崩。结果了,并不会,只是最大值为2147483647换算为秒大概66年,估计服务器会睡着]JVM:Java Virtual Machine什么是JMM?ja...

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

[昨天好奇哈,就像试试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

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。