JVM、maven、Nexus

news/2024/5/3 19:48:51/文章来源:https://blog.csdn.net/m0_51586984/article/details/137584649

一、jvm简介

1.应用程序申请内存时出现的三种情况:

①OOM:内存溢出,是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免

② Memory Leak:内存泄漏,是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

③内存抖动:指在短时间内有大量的对象被创建或者被回收的现象

黄色模块规定:内存不能超过32G,黄色区域都调用的是jdk底层的内存区域,每个应用模块都占用独立的JVM

 2.JVM组成区

 流程:首先所有的类文件.class,基于类加载子系统(class loader subsystem)中的类加载器,

将多个类封装继承起来,放到内部来申请内存进行交换;基于类加载子系统在通过执行引擎来处理它的内存空间(runtime data Areas :JVM的内存区域)

执行引擎: 包括JIT (JustInTimeCompiler)即时编译器,动态编译的一个类, GC垃圾回收器

本地方法接口(Native method Interface): 将本地方法栈通过JNI(Java Native Interface)调用Native Method Libraries,比

如C,C++库等,扩展Java功能,融合不同的编程语言为Java所用

3.JVM运行时数据区域

本地方法区method Area(线程共享,JDK8以后叫元空间):线程共享。存放类、常量、静态变量等。

heap(堆):线程共享。堆在虚拟机启动时创建,存放创建的所有对象信息,存放较大资源,具体对象。若对象无法申请将抛OOM异常,通过GC垃圾回收器进行管理。通过-Xmx -Xms 指定最大堆和最小堆空间大小,是JVM内存中最大的区域

Java stack:线程私有,每个线程分配一个栈。存放java8大基本数据类型对象引用,实例的本地变量。

程序计数器(PC寄存器):线程私有,指针,指向某个线程。

本地方法栈:线程私有,非JAVA的一些库。

4.GC垃圾回收器

        ①引用计数器,引用值为0。(Python)  a=100

        当pc计数器为0的时候,就清理垃圾

        特殊:不会外部程序引用的对象,但不同的方法也在互相引用,这也需被清掉

        ②Java   根可达算法,找不到的资源为垃圾

5.垃圾回收算法

①:标记清除算法(年轻代)

红色:垃圾      绿色:被使用的内存            灰色:没被使用的内存

弊端:效率高,但是容易出现内存碎片,导致系统内存利用率不高

②:标记压缩算法(老年代)

        标记整理法就是将内存中存活的对象往一端移动,然后再将端边界以外的对象清除掉。

③:复制算法(幸存者区)

        将内存区域分为两个大小相等的两块,每次只使用其中的一块,当一块用完了之后,便将这块的存活对象复制到另外一块上面,然后一次性将用完的那块 内存数据清除掉。复制算法的过程

优缺点:

效率   复制>清除>压缩

内存整齐度:复制=压缩>清除

内存利用率:压缩=清除>复制

6.jvm垃圾回收详解

STW:stop the world   JVM内存回收,垃圾回收时会停止,出现卡顿。

堆内存分代本地方法区(永久代)  年轻代    老年代

年轻代:伊园区(默认8份)(标记清除算法)      幸存区(from---s0    to --- s1)  默认共2份(复制算法)

老年代:默认20份(标记压缩算法)

【注】:幸存者空间,必须留一半空间,用来存放伊甸园区的不是垃圾的数据

总结:起始时。所有新建对象(特大对象直接进入老年代)都出生再eden,启动GC

      2:先标记eden存活对象,然后将存活对象复制到s0(假设本次是s0,也可以是s1,它们可以调换),eden剩余所有空间都清空。GC完成

      3:继续新建对象,当eden再次满了,启动GC

      4:先同时标记eden和s0中存活对象,然后将存活对象复制到s1。将eden和s0清空,此次GC完成

      5:继续新建对象,当eden满了,启动GC

      6:先标记eden和S1中存活对象,然后将存活对象复制到s0。将eden和s1清空,此次GC完成。

      以后就重复上面的步骤

优化参数:

vim /usr/local/tomcat/bin/catalina.sh  //编辑配置文件
在空白区域编写 CATALINA_OPTS="-server -Xms1g -Xmx1g "

Xmx堆内存最大使用空间(默认为1/4,最大为默认系统可用内存)

Xms堆内存初始内存(默认为1/64)

【注】:jvm内存建议不要超过32G,否则效率急剧下降

-XX:NewSize     设置新生代大小

-XX:MaxNewSize  设置最大新生代内存大小

-Xmn2g设置年轻代大小为2G。在整个堆内存大小确定的情况下,增大年轻代将会减小老年代,反之亦然。此值关系到JVM垃圾回收,对系统性能影响较大,推荐配置为整个堆大小的3/8。推荐年轻代大小要小于老年代。

-Xss128k设置每个线程的栈大小。默认每个线程栈大小为1M。应当根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。需要注意的是:当这个值被设置的较大(例如>2MB)时将会在很大程度上降低系统的性能

-XX:PermSize     非堆内存初始值,默认是物理内存的1/64

-XX:MaxPermSize  最大非堆内存的大小,默认是物理内存的1/4

https://baijiahao.baidu.com/s?id=1681394166244104299&wfr=spider&for=pc

JAVA内存设置

查看java中jvm内存区域的详细大小

java -XX:+PrintGCDetails heap   或者java -Xlog:gc* heap

案例:实现指定jvm堆内存空间、gc垃圾回收过程和OOM错误

javac -cp . heapoom.java    

java -Xms100m -Xmx100m -XX:+PrintGCDetails -cp . heapoom

java -Xms500m -Xmx500m -XX:+PrintGCDetails -cp . heap

 二、java程序编译

1.maven 部署准备

①:maven 介绍

Maven 翻译为"专家"、"内行",是 Apache 基金会旗下的一个纯 Java 开发的开源项目

Maven 是一个项目管理工具,可以对 Java项目进行构建、解决打包依赖等。

它为开发者提供了一套完整的构建生命周期框架,开发团队稍微投入一些时间就能够自动完成工程的基础构建配置;在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行;那是因为大部分的工程配置操作都非常简单并且可复用

Maven基干项目对象模型(POM project object model),它可以通过一小段描述信息(配置)来管理项目的构建;因而,每个maven项目都有一个pom.xml文件

POM( Project Object Model,项目对象模型) 是 Maven 工程的基本工作单元,是一个 XML 文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖等,在执行任务或目标时,Maven 会在当前目录中查找 pom 文件,通过读取pom文件获取所需的配置信息,然后执行目标。

pom.xml 文件中可以指定以下配置

项目依赖

插件

执行目标

项目构建 profile

项目版本

项目开发者列表 相关邮件列表信息

<packaging> 指定项目打包形式,jar或者war

maven 官网:Maven – Welcome to Apache Maven

maven 官方仓库 :http://repo.maven.apache.org

maven 下载:

官方        https://maven.apache.org/download.cgi

清华镜像源  http://mirrors.tuna.tsinghua.edu.cn/apache/maven

官方各版本下载地址,推荐使用次新版本    https://archive.apache.org/dist/maven/maven-3

安装maven前必须安装java 环境:

Maven 3.3 要求 JDK 1.7 或以上

Maven 3.2 要求 JDK 1.6 或以上

Maven 3.0/3.1 要求 JDK 1.5 或以上

注意:需要和jdk版本吻合,例如jpress支持jdk1.8

2.maven安装

①安装方式1:rpm包安装:yum -y install maven

更改maven配置文件,实现加速

vim /etc/maven/settings.xml

<!--阿里云镜像-->

   <mirror>

       <id>nexus-aliyun</id>

       <mirrorOf>*</mirrorOf>

       <name>Nexus aliyun</name>

       <url>http://maven.aliyun.com/nexus/content/groups/public</url>

   </mirror>

②安装方式2:二进制安装  Maven – Installing Apache Maven

3.maven编译流程:

进入到包含有“pom.xml”的路径,执行

mvn clean install package

有的时候受到测试的干扰,导致无法正在进行编译,这时候可以选择跳过测试,执行

mvn clean install package -Dmaven.test.skip=true

注意:选项"-Dmaven.test.skip=true":跳过测试,并且不编译测试下的源代码

选项"-DskipTests":不执行测试,但是会进行测试代码的编译

如果需要编译的代码很庞大,需要考虑对编译环境做一些处理,提成编译效率:

启动多线程编译:mvn -T 4 clean install package -Dmaven.test.skip=true

分配编译的CPU 个数:mvn -T 2C clean install package -Dmaven.test.skip=true

启用多线程编译:mvn clean install package -Dmaven.test.skip=true -Dmaven.compile.fork=true

4.Maven 的打包命令说明:

Maven工程构建的各个环节

clean: 以前编译得到的旧文件class字节码文件删除

compile:将java源程序编译成class字节码文件

test:自动测试,例如,自动调用junit程序

report:报告测试程序执行的结果

package:应用打包,动态Web工程打成war包,java工程打成jar包

install: 是指将打包得到的文件复制到仓库中指定的位置

deploy:将动态Web工程生成的war包复制到Servlet容器下,使其可以运行

5.执行 java 代码编译实战案例

1:编译安装 spring-boot 项目(注意,在pom.xml文件路径下编译

        mvn -T 4 clean package -Dmaven.test.skip=true

java -jar spring-boot-helloworld-0.9.0-SNAPSHOT.jar &   运行编译后的java程序

java编译jpress

git clone jpress: JPress CMS,一个完整的 Java CMS 网站管理系统,目前已经有 10w+ 网站使用 JPress CMS 进行驱动,其中包括多个政府机构,200+上市公司,中科院、红+字会等。

13157479071   a123456

三、私有仓库 Nexus

1.Nexus简介

Nexus 是一个强大的 Maven 和其它仓库的管理器,它极大地简化了自己内部仓库的维护和外部仓库的

访问。

Nexus 官网:https://www.sonatype.com/

Download

【注】:  安装Nexus建议内存至少4G以上

Nexu监听端口:cat /usr/local/nexus/etc/nexus-default.properties

 

2.默认仓库有以下 type 类型

Hosted:本地仓库,通常我们会部署自己的构件到这一类型的仓库,比如公司的第三方库

Proxy:代理仓库,它们被用来代理远程的公共仓库,如maven 中央仓库(官方仓库)

Group:仓库组,用来合并多个 hosted/proxy 仓库,当你的项目希望在多个repository 使用资源时就

不需要多次引用了,只需要引用一个 group 即可

仓库配置优化

默认仓库使用国外仓库地址,可修改为国内镜像地址进行加速

可以修改为国内镜像,参考阿里云   仓库服务

配置邮件:参考jumpserver配置方式

3.使用 Nexus 构建私有 Yum 和 Apt 仓库

通过 Nexus 构建为公司内网 Yum 和 Apt 仓库,代理至阿里云镜像安装包

Rocky-9:epel-9-Everything-x86_64安装包下载_开源镜像站-阿里云

ubuntu:ubuntu安装包下载_开源镜像站-阿里云

创建仓库blob存储空间

创建基于blob存储的proxy仓库

内网测试机上,删除公网路由,重新编写repo文件指向nexus,实现本地repo仓库效果

yum clean all

[nexus]

name=nexus

baseurl=http://192.168.10.100:8081/repository/yum-epel-9/

gpgcheck=0

ubuntu仓库模式差不多

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

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

相关文章

自己动手封装axios通用方法并上传至私有npm仓库:详细步骤与实现指南

文章目录 一、构建方法1、api/request.js2、api/requestHandler.js3、api/index.js 二、测试方法1、api/axios.js2、main.js3、app.vue4、vue.config.js5、index.html 三、打包1、配置package.json2、生成库包3、配置发布信息4、发布 四、使用1、安装2、使用 五、维护1、维护和…

基于FPGA的DDR相关知识导航界面

个人觉得想要真正理解DDR&#xff0c;那就要从SDRAM入手&#xff0c;SDRAM读写控制器也可以作为入门FPGA的一个判断标准&#xff0c;说实话I2C、UART、SPI这些接口难度太低了&#xff0c;会写这些接口说明不了什么。 很常见的问题&#xff0c;现在DDR3、SDRAM、DDR4官方都有IP&…

数据结构——二叉树链式结构的实现

大家好我是小锋&#xff0c;今天我们来学习的是二叉树链式结构的实现 首先我们来学习一下二叉树的基本操作 在看二叉树基本操作前我们来回顾下二叉树的概念&#xff0c; 二叉树是&#xff1a; 1. 空树 2. 非空&#xff1a;根节点&#xff0c;根节点的左子树、根节点的右…

【THM】Exploit Vulnerabilities(利用漏洞)-

介绍 在这个房间里,我们将讨论一些识别漏洞的方法,并结合我们的研究技能来了解这些漏洞是如何被滥用的。 此外,您还会发现一些公开可用的资源,这些资源是您在执行漏洞研究和利用时的技能和工具的重要补充。然后,您将在房间的最后将所有这些应用到实际挑战中。 自动化与…

如何监控容器或K8s中的OpenSearch

概述 当前 OpenSearch 使用的越来越多, 但是 OpenSearch 生态还不尽完善. 针对如下情况: 监控容器化或运行在 K8s 中的 OpenSearch 我查了下, 官方还没有提供完备的方案. 这里如何监控 K8s 中的 OpenSearch, 包括安装 exporter 插件、采集、展示全环节。 OpenSearch 简介…

红豆Cat 1开源|项目三: 从0-1设计一款HTTP版本RTU(支持GNSS)产品的软硬件全过程

HTTP版RTU&#xff08;支持GNSS&#xff09;项目概述 RTU&#xff08;Remote Terminal Unit&#xff09;&#xff0c;中文即远程终端控制系统&#xff0c;负责对现场信号、工业设备的监测和控制。RTU是构成企业综合自动化系统的核心装置&#xff0c;通常由信号输入/出模块、微…

蓝桥杯-单片机基础16——利用定时计数中断进行动态数码管的多窗口显示

综合查阅了网络上目前能找到的所有关于此技能的代码&#xff0c;最终找到了下述方式比较可靠&#xff0c;且可以自定义任意显示的数值。 传统采用延时函数的方式实现动态数码管扫描&#xff0c;在题目变复杂时效果总是会不佳&#xff0c;因此在省赛中有必要尝试采用定时计数器中…

洪水预警:如何通过数据可视化提前应对灾害

数据可视化在应对洪涝灾害问题中发挥着重要作用。洪涝灾害是一种常见而严重的自然灾害&#xff0c;给人们的生命、财产和生活带来了巨大的威胁和损失。而数据可视化技术通过将海量的数据转化为直观、易懂的图表、图像或地图等形式&#xff0c;帮助人们更好地理解洪涝灾害的发生…

微服务-2 Eureka

Eureka 启动页面&#xff1a; 同理再注册完order-service后&#xff0c;刷新启动页面&#xff1a; userservice 启动多台服务&#xff1a; [ 代码 ]&#xff1a;orderService.java&#xff08;用 RestTemplate 调其他服务&#xff0c;用 userservice 代替 localhost:8081&…

视频图像的两种表示方式YUV与RGB(4)

本篇主要讲YUV与RGB之间的转换&#xff0c;包括YUV444 颜色编码格式 转为 RGB 格式 &#xff0c;RGB颜色编码格式转为 YUV444 格式。 一、 YUV与RGB之间的转换 YUV与RGB颜色格式之间进行转换时 , 涉及一系列的数学运算 ; YUV 颜色编码格式转为RGB格式的转换公式 取决于 于 YUV …

数据结构——线性表(顺序存储结构)

语言&#xff1a;C语言软件&#xff1a;Visual Studio 2022笔记书籍&#xff1a;数据结构——用C语言描述如有错误&#xff0c;感谢指正。若有侵权请联系博主 一、线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列&#xff0c;对n>0&#xff0c;除第一元素无直接…

电能质量问题有几类?再怎样进行谐波治理

一、为什么要进行电能质量的治理 电能质量是指电力系统中电能的质量。理想的电能应该是完美对称的正弦波。一些因素会使波形偏离对称正弦&#xff0c;由此便产生了电能质量问题。一方面我们研究存在哪些影响因素会导致电能质量问题&#xff0c;一方面我们研究这些因素会导致哪…

如何用electron(vue)搜索电脑本地wifi

对于搜索本地 WiFi 网络&#xff0c;可以使用 Electron 结合 Node.js 来编写一个简单的应用程序。 以下是一个基本的示例&#xff0c;它使用 Node.js 的 wifi 模块来搜索并列出附近的 WiFi 网络&#xff1a; 首先&#xff0c;确保你已经安装了 Node.js 和 Electron。 然后&am…

linux 搭建Samba服务

Samba简介 SAMBA是⼀个实现不同操作系统之间⽂件共享和打印机共享的⼀种SMB协议的免费软件&#xff0c; SMB(Server Message block)协议是window下所使⽤的⽂件共享协议&#xff0c;我们在linux系统或 者其类unix系统当中可以通过samba服务来实现SMB功能。 &#xff08;1&…

【SpringBoot】-- mapstruct进行类型转换时Converter实现类不能自动生成代码问题解决

问题描述 我的问题如下&#xff1a; 应该在红色区域生成对应的转换细节&#xff0c;但是这里只返回了一个空对象 问题解决 加入lombok-mapstruct-binding依赖,也要注意依赖引用顺序问题 <dependency><groupId>org.projectlombok</groupId><artifactId&…

chrome google浏览器添加插件扩展失败怎么办,无法从该网站添加应用、扩展程序和用户脚本确定,

无法从该网站添加应用、扩展程序和用户脚本确定 chrome google浏览器添加插件扩展失败怎么办&#xff0c;无法从该网站添加应用、扩展程序和用户脚本确定&#xff0c; 需要打开调试模式 chrome://extensions/

NzN的数据结构--选择排序

接上文&#xff0c;本章我们来介绍选择排序。先三连后看才是好习惯~~~ 目录 一、基本思想 二、直接选择排序 三、堆排序 一、基本思想 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待…

Burp Suite Professional 2024.3.1 for macOS x64 ARM64 - 领先的 Web 渗透测试软件

Burp Suite Professional 2024.3.1 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件 世界排名第一的 Web 渗透测试工具包 请访问原文链接&#xff1a;Burp Suite Professional 2024.3.1 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件&#xff0c;查看最新版。原…

[机器学习Day 1~3

[机器学习]Day 1~3 数据预处理第1步&#xff1a;导入库第2步&#xff1a;导入数据集第3步&#xff1a;处理丢失数据第4步&#xff1a;解析分类数据创建虚拟变量 第5步&#xff1a;拆分数据集为训练集合和测试集合第6步&#xff1a;特征量化 简单线性回归模型第一步&#xff1a;…

Echarts-实现地图并轮播地图信息

目录 ./map-geojson/jinhua.json./CenterMap.vue./center.vue 使用地图组件效果 ./map-geojson/jinhua.json {"type":"FeatureCollection","features":[{"type":"Feature","properties":{"adcode":330…