JVM优化

1. JVM内存

JVM内存:
1,虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法出口等
栈的大小可以固定也可以动态扩展。
当栈调用深度大于JVM允许的范围,会抛出StackOverflowError
2,本地方法栈
3,PC寄存器:记录当前程序执行到哪一步
4,堆:存放所有的对象和数组。
分为新生代(伊甸园、存活区)占1/3堆空间、老年代占2/3堆空间
5,方法区:所有线程共享。用于存储类的信息、常量池、方法数据、方法代码等。
方法区逻辑上属于堆的一部分,但是为了与堆区分,又叫“非堆”
JDK1.8之前方法区的实现是永久代,JDK1.8之后分方法区的实现是元空间(元空间本地存储)

2. 永久代、元空间?

元空间和永久代概念?
元空间和永久代类似,都是JVM规范中方法区的实现
永久代是JVM虚拟机中一块内存空间,可以设置大小,在内存不够时会触发FullGC,也就是和老年代同时垃圾回收
元空间不属于JVM内存,而是使用本地内存,默认是可以无限制使用本地内存,也可以通过参数限制内存使用大小
元空间为什么代替了永久代?
1,字符串存在永久代中,容易出现性能问题和内存溢出。
2,类及方法的信息比较难确定其大小,永久代大小指定比较困难,太小容易出现永久代溢出,太大容易造成老年代溢出
3,永久代会为GC带来不必要的复杂度,并且回收效率偏低。

string声明的字面量数据都放在字符串常量池中
jdk1.6中字符串常量池存放在方法区(永久代中)
jdk1.7及以后字符串常量池存放在堆空间

如果不是用双引号声明的String对象,可以使用String提供的intern方法。
intern 方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中

String string = new String("hello");
//将字符串放在常量池中
String intern = string.intern();
//直接从常量池获取
String str = "hello";
boolean flag = intern==str;
System.out.println("result = "+ flag);

3. 堆栈?

栈:方法调用(自动释放)、变量名
堆:new出的对象
在这里插入图片描述

4. GC

垃圾回收算法:mark-sweep标记清除、copying拷贝、mark-compact标记压缩
在这里插入图片描述

5. 分代模型:

新生代:coping算法,比例为8:1:1,eden(伊甸区8):survivor1:survivor1

新生代采用coping算法,
比如先给eden区new10个对象,然后回收9个对象,将剩余的1个放到survivor,这时eden区又为空
然后在eden区new10个对象,再回收时,回收eden区和第一个survivor区,将不需要回收的对象放在第二个survivor区

老年代:新生代survivor区装满之后,放到老年代
老年代满了之后会进行FGC(full)
在这里插入图片描述

6. serial+serial old垃圾回收组合

内存几十兆时:
serial单线程stw(stop the world)垃圾回收
serial采用copying拷贝算法,
serial old采用mark-sweep标记清除、mark-compact标记压缩

7. parallel scavenge+parallel old垃圾回收组合

parallel并行(其实就是多线程同时垃圾回收)
内存几百兆~1G时:
并行多线程
PS+PO组合
在需要垃圾回收时,多个线程同时干活

8. CMS+ParNew垃圾回收组合

CMS:concurrent-mark-sweep并发标记清除
几十G
Concurrent GC 并发垃圾回收
并发:指GC线程和业务线程同时进行
CMS适用于老年代

在这里插入图片描述

9. 三色标记算法

黑色标记对象A:对象和子对象都已完成标记
灰色标记对象B:对象已完成标记,但是子对象没有完成
白色标记对象D:对象和子对象都没有完成标记
当A的子对象是BB的子对象是D时,如果BD之间断开关联,AD之间增加关联时。
需要将黑色标记对象A,改成灰色。这称为CMS解决方案incremental update增量更新
但是CMS存在bug,
当垃圾回收线程1标记完对象A和其子对象时,
切换到垃圾回收线程2,这时业务线程给对象A增加一个子对象,
垃圾回收线程2应该把对象A应该把A改成灰色的,
如果切换回垃圾回收线程1就还是会把A标记成黑色。
需要在重新标记时STW,浪费时间

10. G1

G1:garbage first首先回收垃圾特别多的区域
是一个老年代和新生代共用的垃圾回收器
G1采用局部收集的回收思想。将Java堆内存划分成多个相同大小的独立region区域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/440295.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

构建cef基本框架及构建过程中的参数说明

文章目录 准备源码版本编译版本结构编译过程写了好多CEF的内容了,发现一个最初的CEF helloworld的过程都没有写,也就是如何搭建这个CEF框架。今天把这个过程记录一下。 准备源码版本 在度娘上搜cef源码,一般得到的是https://bitbucket.org/chromiumembedded/cef/这个网址,…

linux下改变主机名,永久生效的方法

hostnamectl set-hostname test 例子 #支持大写必须就要这样写 hostnamectl set-hostname 名称 --static

Docker安装主从数据库

我自己的主数据库名字 user_muster 密码是123456 从数据库 就是slave2 名字是root 密码是123456 首先开启docker后直接执行命令 docker run -d \ -p 3307:3306 \ -v /xk857/mysql/master/conf:/etc/mysql/conf.d \ -v /xk857/mysql/master/data:/var/lib/mysql \ -e MYSQL_…

长非编码RNA(lncRNA)LINC00339编码的肽段促进滋养层细胞与子宫内膜细胞粘附的研究 AbMole

胚胎植入是一个复杂的过程,受多种因素影响,尤其是子宫内膜(endometrium)与胚泡(blastocyst)之间的相互作用。子宫内膜接受性(Endometrial Receptivity, ER)是指子宫内膜在适当的功能…

springboot+xjar加密打包部署教程

需求背景 为了跟上时代的步伐,为了更好的生存。开个玩笑,就是心血来潮,使用xjar加密部署jar包,于是就测试一下。 xjar教程 1-maven配置文件修改 首先找到自己ideal配置的maven文件夹,然后找到apache-maven-3.9.3\co…

基于Pytorch搭建分布式训练环境

Pytorch系列 文章目录 Pytorch系列前言一、DDP是什么二、DPP原理terms、nodes 和 ranks等相关术语解读DDP 的局限性为什么要选择 DDP 而不是 DP代码演示1. 在一个单 GPU 的 Node 上进行训练(baseline)2. 在一个多 GPU 的 Node 上进行训练临门一脚&#x…

js【详解】event loop(事件循环/事件轮询)

event loop 是异步回调的实现原理 js 代码的执行过程 从前到后,一行一行执行如果某一行执行报错,则停止下面代码的执行先把同步代码执行完,再执行异步 event loop 图解 以下方代码为例: 第1步 将第 1 行代码放入调用栈 将要执行第…

【探索Linux】—— 强大的命令行工具 P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )

阅读导航 引言一、socket 常见API表二、函数详细介绍01. socket()02. bind()03. listen()04. accept()05. connect()06. send()07. recv()08. close()09. select()10. getaddrinfo()11. sendto()12. recvfrom()13. setsockopt()14. getsockopt()15. shutdown()16. inet_pton()1…

Rust 编写新一代 Web 框架 Teo,同时支持 Node 和 Python,速度惊人!

大家好,我是渔夫。 今天分享主题,随着 Web 技术的迅速发展,开发变得愈发复杂,需要投入更多的时间和精力,今天介绍这款用 Rust 编写的新一代 Web 框架。 Web 项目开发越来越复杂,也让开发者带来很多挑战&a…

中国电子学会2021年6月份青少年软件编程Sc ratch图形化等级考试试卷四级真题

【 单选题 】 1.执行下列程序,输出的结果为? A:12 B:24 C:8 D:30 2.执行下列程序,角色说出的内容是? A:2 B:3 C:4 D:5 3.执行…

21-Java观察者模式 ( Observer Pattern )

Java备忘录模式 摘要实现范例 观察者模式 ( Observer Pattern ) 常用于对象间存在一对多关系时,比如,当一个对象被修改时,需要自动通知它的依赖对象 观察者模式属于行为型模式 摘要 1. 意图 定义对象间的一种一对多的依赖关系&#xff…

postman的替换者postcat

手册简介 Postcat 是国产的开源 api 管理工具,定位小团队及个人,有 API 相关的核心功能,文档、测试、管理、mock 甚至 api 分享等等功能。 目前还在持续维护中,欢迎大家关注并Star 支持一下~ https://github.com/Postcatlab/post…

《C缺陷和陷阱》-笔记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一、理解函数声明 1.(*(void(*)( ))0)( ); 2.signal 函数接受两个参数: 3.使用typedef 简化函数声明: 二、运算符的优先级…

【HTML】HTML基础8.1(表单标签)

目录 效果 基础知识 标签 ① ② 代码 效果 基础知识 表单的组成元素 表单控件用户所填写的信息提示信息提示用户需要填的信息表单域包含表单元素的区域 标签 ① <form action"" method""></form> <form>标签确定了一个表单域&…

Centos安装Miniconda

Centos安装Miniconda 一、前言二、安装1、下载Miniconda2、执行安装脚本3、加载环境变量使之生效&#xff1a;4、配置conda国内镜像&#xff1a; 三、conda常用命令1、创建环境2、查看所有环境3、删除一个环境4、激活指定环境5、退出当前环境 一、前言 需要在Centos中使用pytho…

吴恩达深度学习笔记:深度学习引言1.1-1.5

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第一周&#xff1a;深度学习引言(Introduction to Deep Learning)1.1 欢迎(Welcome)1.2 什么是神经网络&#xff1f;(What is a Neural Network)1.3 神经网络的监督学习(Supervised Learning …

《数字图像处理》读书笔记

本文笔记来自——数字图像处理_第三版_中_冈萨雷斯 1.使用数字图像处理领域的实例 如果光谱波段根据光子能量进行分组&#xff0c;则可得到下图的光谱&#xff0c;范围从伽马射线&#xff08;最高能量&#xff09;到无线电波&#xff08;最低能量&#xff09;。 1.1伽马射线成…

C++学习笔记:AVL树

AVL树 什么是AVL树?AVL树节点的定义AVL树的插入平衡因子调整旋转调整左旋转右旋转左右双旋右左双旋 AVL树完整代码实现 什么是AVL树? AVL是1962年,两位俄罗斯数学家G.M.Adelson-Velskii和E.M.Landis 为了解决如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找…

Mac M1:通过docker安装RocketMQ、RocketMQ-Dashboard

0. 引言 最近本地启动以前docker安装的rocketmq发现报错了&#xff0c;因为是从老mac迁移过来的&#xff0c;发现支持的芯片还是amd的&#xff0c;于是重新在docker下安装rocketmq&#xff0c;并记录下步骤&#xff0c;方便大家后续参考。 1. 步骤 1、先下载项目源码 git c…

景联文科技:专业提供高质量大语言模型训练数据

2024年&#xff0c;数字经济被再次写入政府工作报告中&#xff0c;报告指出要深化大数据、人工智能等研发应用&#xff0c;打造具有国际竞争力的数字产业集群。 大模型作为生成式人工智能的基础&#xff0c;日益成为国际科技竞争的焦点。人大代表杨剑宇指出&#xff0c;尽管我国…