JVM、maven、Nexus

一、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.rhkb.cn/news/308456.html

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

相关文章

react query 学习笔记

文章目录 react query 学习笔记查询客户端 QueryClient获取查询客户端 useQueryClient异步重新请求数据 queryClient.fetchQuery /使查询失效 queryClient.invalidateQueries 与 重新请求数据queryClient.refetchQueries 查询 QueriesuseQuery查询配置对象查询的键值 Query Key…

最前沿・量子退火建模方法(1) : subQUBO讲解和python实现

前言 量子退火机在小规模问题上的效果得到了有效验证&#xff0c;但是由于物理量子比特的大规模制备以及噪声的影响&#xff0c;还没有办法再大规模的场景下应用。 这时候就需要我们思考&#xff0c;如何通过软件的方法怎么样把大的问题分解成小的问题&#xff0c;以便通过现在…

模型 洛萨达比例

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。积极和消极的平衡&#xff0c;左右着你们的关系。 1 洛萨达比例的应用 1.1 企业团队管理之洛萨达比例的应用 一个软件开发公司的团队经理注意到团队的士气和生产力有所下降。此时洛萨达比例是在2.9:…

故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法

故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法 目录 故障诊断 | Matlab实现基于小波包结合鹈鹕算法优化卷积神经网络DWT-POA-CNN实现电缆故障诊断算法分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现基于小波…

关于机器学习/深度学习的一些事-答知乎问(二)

进化算法与深度强化学习算法结合如何进行改进&#xff1f; &#xff08;1&#xff09;进化算法普遍存在着样本效率低下的问题&#xff0c;虽然其探索度较高&#xff0c;但其本质为全局随机性搜索&#xff0c;需要在整个回合结束后才能更新其种群&#xff0c;而深度强化学习在每…

Linux系统——Elasticsearch企业级日志分析系统

目录 前言 一、ELK概述 1.ELK简介 2.ELK特点 3.为什么要使用ELK 4.完整日志系统基本特征 5.ELK工作原理 6.Elasticsearch介绍 6.1Elasticsearch概述 6.2Elasticsearch核心概念 7.Logstash介绍 7.1Logstash简介 7.2Logstash主要组件 8.Kibana介绍 8.1Kibana简介 …

爬取学习强国视频小示例

因为需要爬取的视频数量并不是很大&#xff0c;总共需要将131个视频下载下来&#xff0c;所以就直接去手动找找视频的地址和名称保存下来的。由于页面是动态加载的&#xff0c;所以我们无法在网站源码中直接找到视频的超链接。设想是可以用Selenium模拟浏览器点击进行动态加载获…

Java基础(一)--语法入门

文章目录 第一章、语法入门一、Java简介1、JVM2、Java程序执行过程3、JDK4、JRE5、JDK、JRE和JVM三者关系 二、Java常量与变量1、标识符2、关键字3、保留字4、变量5、数据类型6、常量 三、运算符1、算术运算符2、赋值运算符3、关系运算符4、逻辑运算符5、条件运算符6、运算符的…

SpringMVC(一)【入门】

前言 学完了大数据基本组件&#xff0c;SpringMVC 也得了解了解&#xff0c;为的是之后 SpringBoot 能够快速掌握。SpringMVC 可能在大数据工作中用的不多&#xff0c;但是 SSM 毕竟是现在就业必知必会的东西了。SpringBoot 在数仓开发可能会经常用到&#xff0c;所以不废话学吧…

CSS盒模型(详讲)

目录 概述&#xff1a; 内容区&#xff08;content&#xff09;&#xff1a; 内边距&#xff08;paddingj&#xff09;&#xff1a; 前言&#xff1a; 设置内边距&#xff1a; 边框&#xff08;border&#xff09;&#xff1a; 前言&#xff1a; 示例&#xff1a; 外边…

机器人路径规划:基于Q-learning算法的移动机器人路径规划,可以自定义地图,修改起始点,提供MATLAB代码

一、Q-learning算法 Q-learning算法是强化学习算法中的一种&#xff0c;该算法主要包含&#xff1a;Agent、状态、动作、环境、回报和惩罚。Q-learning算法通过机器人与环境不断地交换信息&#xff0c;来实现自我学习。Q-learning算法中的Q表是机器人与环境交互后的结果&#…

51单片机 DS1302

DS1302 实现流程 将提供的ds1302底层参考程序拷贝到工程下 注意在ds1302.c中可能硬件引脚没有定义&#xff0c;注意去看一下。还有头文件什么的在ds1302中记得加上 参考代码&#xff1a; #include "reg52.h" #include "ds1302.h"unsigned char Write_…

「 典型安全漏洞系列 」14.NoSQL注入漏洞详解

NoSQL注入是一个漏洞&#xff0c;攻击者能够干扰应用程序对NoSQL数据库进行的查询&#xff0c;本文我们将研究如何测试一般的NoSQL漏洞&#xff0c;然后重点研究如何利用MongoDB中的漏洞&#xff08;MongoDB是最流行的NoSQL数据库&#xff09;。 1. 什么是NoSQL注入 NoSQL注入…

AI大模型探索之路-实战篇:基于CVP架构-企业级知识库实战落地

目录 前言 一、概述 二、本地知识库需求分析 1. 知识库场景分析 2. 知识库应用特点 3. 知识库核心功能 三、本地知识库架构设计 1. RAG架构分析 2. 大模型方案选型 3. 应用技术架构选型 4. 向量数据库选型 5. 模型选型 三、本地知识库RAG评估 四、本地知识库代码落地 1. 文件…

Electron+React 搭建桌面应用

创建应用程序 创建 Electron 应用 使用 Webpack 创建新的 Electron 应用程序&#xff1a; npm init electron-applatest my-new-app -- --templatewebpack 启动应用 npm start 设置 Webpack 配置 添加依赖包&#xff0c;确保可以正确使用 JSX 和其他 React 功能&#xff…

【C++学习】深入理解C++异常处理机制:异常类型,捕获和处理策略

文章目录 ♫一.异常的提出♫二.异常的概念♫三.异常的使用♫3.1 异常的抛出和捕获♫3.2.异常的重新抛出♫3.3异常安全♫3.4 异常规范 ♫4.自定义异常体系♫5.C标准库的异常体系♫6.异常的优缺点 ♫一.异常的提出 之前&#xff1a; C语言传统的处理错误的方式与带来的弊端&…

C# WebSoket服务器

WebSocket是一种在单个TCP连接上进行全双工通信的协议WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单, 允许服务端主动向客户端推送数据。在WebSocket API中, 浏览器和服务器只需要完成一次握手, 两者之间就直接可以创建持久性的连…

人工智能科普:人工智能的分类

人工智能的分类多种多样&#xff0c;根据不同的标准和应用场景&#xff0c;可以将其划分为多个不同的类别。以下是对人工智能分类的详细探讨。 一、按应用领域分类 1. 智能机器人&#xff1a;智能机器人是人工智能技术在机器人领域的应用。它们能够根据环境和任务的不同进行自…

开源免费AI引擎:智能合同审查技术的应用与优势

随着数字化转型的加速&#xff0c;合同作为商业活动中的重要法律文件&#xff0c;其审查和管理变得越来越重要。传统的合同审查方式耗时且容易出错&#xff0c;而智能AI合同审查技术的引入&#xff0c;为这一领域带来了革命性的变化。本文将探讨智能AI合同审查技术的应用和优势…

实时智能应答3D数字人搭建2

先看效果&#xff1a; 3d数字人讲黑洞 根据艾媒咨询数据&#xff0c;2021年&#xff0c;中国虚拟人核心产业规模达到62.2亿元&#xff0c;带动市场规模达到1074.9亿元&#xff1b;2025年&#xff0c;这一数据预计将达到480.6亿元与6402.7亿元&#xff0c;同比增长迅猛。数字人可…