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仓库模式差不多

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

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

相关文章

GPT4.5发布了?OpenAI终于发布正式版Turbo,重回AI王座第一

令人惊讶的是&#xff0c;短短三个月内&#xff0c;全球最强AI的称号又一次易主了&#xff01;几个月前&#xff0c;Claude3 Opus的性能全面超过了GPT-4&#xff0c;全球网友纷纷转向Claude3&#xff0c;并分享了他们对Claude3的惊艳体验。然而&#xff0c;OpenAI最近再次展示了…

Nginx健康检查

Nginx健康检查nginx_upstream_check_module nginx健康检查介绍: ​ 主动健康检查&#xff0c;nignx定时主动地去ping后端的服务列表&#xff0c;当发现某服务出现异常时&#xff0c;把该服务从健康列表中移除&#xff0c;当发现某服务恢复时&#xff0c;又能够将该服务加回健…

网格(mesh)生成算法

mesh网格生成算法 1. 简介2. Points clouds Vs Meshes3. 为什么要生成mesh网格以及生成mesh网格的难点4. 常见的mesh网格生成算法 1. 简介 基于 3D视觉的新兴应用场景蓬勃发展&#xff0c;3D点云越来越受到人们的广泛关注。点云有着广泛的应用领域包括机器人技术、3D图形、自动…

多模态 ——LLaVA 集成先进图像理解与自然语言交互GPT-4的大模型

概述 提出了一种大型模型 LLaVA&#xff0c;它使用 GPT-4 生成多模态语言图像指令跟随数据&#xff0c;并利用该数据将视觉和语言理解融为一体。初步实验表明&#xff0c;LLaVA 展示了出色的多模态聊天能力&#xff0c;在合成多模态指令上的表现优于 GPT-4。 在科学质量保证中…

Java中volatile关键字

保证了不同线程对这个变量进行操作时的可见性&#xff0c;即一个线程修改了某个变量的值&#xff0c;这新值对其他线程来说是立即可见的,volatile关键字会强制将修改的值立即写入主存。 1.volatile的可见性 一个典型的例子&#xff1a;永不停止的循环。 public class Forever…

全网最好的JVM总结:有生命周期的JVM

1.编译 1.1 java中编译器有哪些&#xff1f; 前端编译器 javac后台即时编译器 JIT编译器静态提前编译器 &#xff08;一步到位&#xff0c;直接把java编译成二进制&#xff09; 2.2 编译过程是怎么样&#xff1f; 解析与填充符号表&#xff0c;生成语法树 &#xff08;编译…

设计模式学习笔记 - 设计模式与范式 -行为型:17.中介模式:什么时候用中介模式?什么时候用观察者模式?

概述 本章学习 23 种经典设计模式中的最后一个设计模式&#xff0c;中介模式。和之前讲过的命令模式、解释器模式类似&#xff0c;中介模式也不怎么常用&#xff0c;应用场景比较特殊、有限&#xff0c;但是&#xff0c;跟它俩不同的是&#xff0c;中介模式理解起来并不难&…

Linux部署自动化运维平台Spug

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

【深度学习】多层感知机与卷积神经网络解析

引言&#xff1a; 在人工智能的宏伟画卷中&#xff0c;深度学习如同一笔瑰丽而深邃的色彩&#xff0c;为这幅画增添了无限的生命力和潜能。作为支撑这一领域核心技术的基石&#xff0c;多层感知机&#xff08;MLP&#xff09;和卷积神经网络&#xff08;CNN&#xff09;在模仿人…

文心一言 VS 讯飞星火 VS chatgpt (236)-- 算法导论17.3 2题

二、使用势能法重做练习17.1-3。练习17.1-3的内容是&#xff1a;假定我们对一个数据结构执行一个由 n 个操作组成的操作序列&#xff0c;当 i 严格为 2 的幂时第 i 个操作的代价为 i &#xff0c;否则代价为1。使用聚合分析确定每个操作的摊还代价。如果要写代码&#xff0c;请…

【漏洞复现】泛微E-Mobile 6.0 client.do存在命令执行漏洞

0x01 阅读须知 “如棠安全的技术文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供…

关于Salesforce DevOps的理解

“DevOps”是一组结合了软件开发 &#xff08;Dev&#xff09; 和运营 &#xff08;Ops&#xff09; 的实践&#xff0c;可帮助团队更快、更可靠地构建、测试和发布软件。 DevOps 的核心理念包括持续集成&#xff08;Continuous Integration&#xff09;、持续交付&#xff08;…

Docker+Nginx部署vue项目

这篇文章给大家分享一下如何使用DockerNginx部署前端vue项目。 第一步&#xff1a;创建vue项目 执行这个命令&#xff0c;创建一个vue项目 npm create vue3将vue项目打包 npm run build此时会看到vue工程中生成了一个dist文件&#xff0c;我们将他上传到服务器中。 第二步…

步骤大全:网站建设3个基本流程详解

一.领取一个免费域名和SSL证书&#xff0c;和CDN 1.打开网站链接&#xff1a;https://www.rainyun.com/z22_ 2.在网站主页上&#xff0c;您会看到一个"登陆/注册"的选项。 3.点击"登陆/注册"&#xff0c;然后选择"微信登录"选项。 4.使用您的…

VMware Workstation部署最新版OpenWrt 23.05.3

正文共&#xff1a;1456 字 51 图&#xff0c;预估阅读时间&#xff1a;2 分钟 我们之前介绍了如何在VMware Workstation上安装OpenWrt&#xff08;软路由是啥&#xff1f;OpenWrt又是啥&#xff1f;长啥样&#xff1f;在VMware装一个瞅瞅&#xff09;&#xff0c;也介绍了如何…

LRUCache原理及源码实现

目录 LRUCache简介&#xff1a; LRUCache的实现&#xff1a; LinkedHashMap方法实现&#xff1a; 自己实现链表&#xff1a; 前言&#xff1a; 有需要本文章源码的友友请前往&#xff1a;LRUCache源码 LRUCache简介&#xff1a; LRU是Least Recently Used的缩写&#xf…

扣子Coze插件教程:如何使用Coze IDE创建插件

&#x1f9d9;‍♂️ 诸位好&#xff0c;吾乃斜杠君&#xff0c;编程界之翘楚&#xff0c;代码之大师。算法如流水&#xff0c;逻辑如棋局。 &#x1f4dc; 吾之笔记&#xff0c;内含诸般技术之秘诀。吾欲以此笔记&#xff0c;传授编程之道&#xff0c;助汝解技术难题。 &#…

通过一篇文章让你了解Linux的重要性

Linux 前言一、什么是Linux后台vs前台为何大多数公司选择使用Linux作为后台服务器 二、Linux的背景介绍UNIX发展的历史Linux发展历史开源官网发行版本DebianUbuntu红帽企业级LinuxCentOSFedoraKali Linux 三、国内企业后台和用户使用Linux现状IT服务器Linux系统应用领域嵌入式L…

每日OJ题_01背包④_力扣1049. 最后一块石头的重量 II

目录 力扣1049. 最后一块石头的重量 II 问题解析 解析代码 滚动数组优化代码 力扣1049. 最后一块石头的重量 II 1049. 最后一块石头的重量 II 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意…

挑战全网,看谁能用栈和队列解决更多问题

1.栈 2.队列 3.栈和队列面试题 正文开始&#xff1a; 1. 栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守 后…