当前位置: 首页 > news >正文

JVM——一些零散的概念(后续学习深入了再补充)

Native

凡是带了native关键字的,说明Java的作用范围的达不到了,需要调用底层C语言的库

调用native方法,会进入本地方法栈,调用本地接口(JNI)

JNI的作用:扩展Java的使用,融合不同的编程语言为Java所用

它在内存区域中专门开辟了一块标记区域:Native Method Stack(本地方法栈),登记native方法

在最终执行的时候,加载本地方法库中的方法通过JNI

调用其他接口:Socket、WebService、http

PC寄存器

程序计数器:Program Counter Register

每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的字节码,(用来存储指向一条指令的地址,也即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计。

方法区

Method Area

方法去是被所有线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在此定义,简单说,所有定义的方法的信息都保存在该区域,此区域属于共享空间;

静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存在方法区中,但是实例变量存在堆内存中,和方法区无关

栈内存,主管程序的运行,生命周期和线程同步;

线程结束,栈内存也就释放了,对于栈来说,不存在垃圾回收问题。

栈中存放:8大基本类型+对象引用+实例的方法

栈运行原理:栈帧

栈满了:StackOverflowError

栈+堆+方法区:交互关系

三种JVM

  • Sun公司 HotSpot
  • BEA JRockit
  • IBM J9VM

Heap,一个JVM只有一个堆内存,堆内存的大小是可以调节的。

类加载器读取了类文件后,一般会把什么东西放到堆中:类实例,方法,常量,变量。 保存我们所有引用类型的真实对象

堆内存中还要细分为三个区域:

  • 新生区(伊甸园区)
  • 老年区
  • 永久区

新生区、老年区、永久区

  • 新生区(伊甸园区)分为三个部分:伊甸园区、幸存0区、幸存1区。新生对象出生在伊甸园区,在经过GC垃圾回收器一次淘汰筛选过后,会进入幸存0区或幸存1区。幸存0区与幸存1区经常互换位置,使其中的数据也会经常互换位置,GC也会对幸存区进行垃圾回收。
  • 等经过GC多次淘汰过后,剩下的数据可以进入老年区,当老年区满了之后,GC将会来一次大清洗,即重GC,清除许多数据。
  • GC垃圾回收主要是在伊甸园区和老年区

假设内存满了,则会爆出OOM,堆内存不够 java.lang.OutOfMemoryError:java heap space

在JDK8以后,永久存储区改了个名字 ---------------- 元空间;

新生区

  • 类:诞生,成长甚至死亡的地方
  • 新生区分为伊甸园区,幸存者区(0,1)
  • 伊甸园区,所有类的实例对象都是在伊甸园区new出来的。如果伊甸园区满了,则GC将会开启清除行动,清除完毕后,幸存的对象将会移到幸存者区

老年区

  • 当幸存区中,一个对象经历15次GC(默认值)还没死的时候,该对象将会进入老年区
  • 可以设置这个参数,通过VM option 添加:-XX:MaxTenuringThreshold=9999(如何设置VM option 看堆内存调优)设置一个对象需要经历9999次GC才能进入老年区
  • 当幸存者区与伊甸园区都满了的时候,则会触发重GC,即GC会开启重清除行动,将伊甸园区与幸存者区皆清除一遍,剩下的对象将会进入老年区
  • 当老年区,幸存区,伊甸园区都满了的时候,则会触发OOM。不过所幸的是,经过研究发现,99%的对象都是临时对象,活不到老年区。

永久区

这个区域常驻内存的,用来存放JDK自身携带的Class对象,Inteface元数据,总的来说,存储的是Java运行时的一些环境或类信息,这个区域不存在垃圾回收。关闭虚拟机就会释放这个区域的内存

方法区,常量池在永久区里

一个启动类,加载了大量的第三方jar包、tomact部署了太多的应用、大量动态生成的反射类,不断地被加载,直到内存满,就会出现OOM;

  • JDK1.6之前:永久代,常量池是在方法区;
  • JDK1.7 :也有永久代,但是慢慢退化了,提出去永久代,常量池在堆;
  • JDK1.8之后:无永久代,常量池在元空间;

在这里插入图片描述

元空间:逻辑上存在,物理上不存在

相关文章:

JVM——一些零散的概念(后续学习深入了再补充)

Native 凡是带了native关键字的,说明Java的作用范围的达不到了,需要调用底层C语言的库 调用native方法,会进入本地方法栈,调用本地接口(JNI) JNI的作用:扩展Java的使用,融合不同的编程语言为Java所用 它在内…...

OpenCV学习(三)——响应鼠标事件(获取点击点坐标和颜色,利用鼠标进行绘图)

响应鼠标事件 3. 响应鼠标事件3.1 获取鼠标点击的坐标3.2 获取鼠标点击像素点的颜色3.3 在鼠标点击的位置生成圆3.4 通过拖动鼠标来绘制填充矩形3.5 通过拖动鼠标绘制未填充矩形3.6 使用鼠标选点绘制多边形3.7 按住鼠标左键进行绘图 3. 响应鼠标事件 使用OpenCV读取图像&#…...

基于安卓android微信小程序的投票系统

项目介绍 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,投票系统小程序被用户普遍使用,为方便用户…...

没有上司的舞会

有了上一篇博客,没有看上一篇博客的可以看看上一篇博客,我们对没有上司的舞会这道题会有更好的理解~ 所以关键的思路就是确定对于每一个节点我们应该维护什么内容才是最合适的,这个题目和上一篇博客的最后一道题目很相似,我们思考…...

2.18每日一题(不直接给f(x)的定积分及变上限积分)

...

RHCE8 资料整理(四)

RHCE8 资料整理 第四篇 存储管理第13章 硬盘管理13.1 对磁盘进行分区13.2 交换分区(swap分区) 第14章 文件系统14.1 了解文件系统14.2 了解硬链接14.3 创建文件系统14.4 挂载文件系统14.5 设置永久挂载14.6 查找文件14.7 find的用法 第15章 逻辑卷管理15…...

目标跟踪ZoomTrack: Target-aware Non-uniform Resizing for Efficient Visual Tracking

论文作者:Yutong Kou,Jin Gao,Bing Li,Gang Wang,Weiming Hu,Yizheng Wang,Liang Li 作者单位:CASIA; University of Chinese Academy of Sciences; ShanghaiTech University; Beijing Institute of Basic Medical Sciences; People AI, Inc 论文链接&…...

Flink Data Sink

本专栏案例代码和数据集链接: https://download.csdn.net/download/shangjg03/88477960 1. Data Sinks 在使用 Flink 进行数据处理时,数据经 Data Source 流入,然后通过系列 Transformations 的转化,最终可以通过 Sink 将计算结果进行输出,Flink Data Sinks 就是用于定义…...

机器学习——正则化

正则化 在机器学习学习中往往不知道需要不知道选取的特征个数,假如特征个数选取过少,容易造成欠拟合,特征个数选取过多,则容易造成过拟合。由此为了保证模型能够很好的拟合样本,同时为了不要出现过拟合现象&#xff0…...

【c++】打家劫舍(动态规划)

打家劫舍 题目难度:高阶 时间限制:1000ms 内存限制:256mb 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff…...

eslint提示 xxx should be listed in the project's dependencies

有时候手动安装了一个npm包A,npm包A里面包含了npm包B,这时候如果 import xxx from npm包B;eslint会报错,提示 npm包B 不在 package.json 里面 解决方法:在 eslintrc.js 增加配置 module.exports {rules: {import/no-extraneous-d…...

H3C LC-5120-52SC-HI配置管理IP

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、MGMT是什么?二、配置步骤1.连接ConsoleWindowsLinux1.配置minicom2.使用minicom 2.配置管理端口3.配置Web管理4.http其它配置项 总结 前言 最近…...

数据结构与算法之排序: 归并排序 (Javascript版)

排序 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例) 归并排序 该排序属于 分治 策略将一个问题分解为两个问题来计算,计算完成之后,就会得到子任务的解,这些解不是最终问题的解,还需要merge起来…...

Java练习题2021-2

"某地大数据防疫平台记录了往来的所有防疫相关信息,包括 本地或外地人员、健康码颜色、接种疫苗情况、最近一次核酸结果、最近一次核酸检测时间等。 该地某区域对于进入人员的要求为: 如果是本地人员,需要绿码和疫苗完全接种方可进入&am…...

深度学习面试题目01

01 什么是神经网络?02 请解释前馈神经网络(Feedforward Neural Network)的工作原理。03 什么是激活函数,为什么它在神经网络中重要?04 请解释反向传播算法(Backpropagation)05 什么是过拟合&…...

ESP32网络开发实例-HTTP-POST请求

HTTP-POST请求 文章目录 HTTP-POST请求1、HTTP POST2、软件准备3、硬件准备4、代码实现在本文中,我们将介绍如何使用 ESP32向 ThingSpeak等常用 API 发出 HTTP POST 请求。 1、HTTP POST 超文本传输协议 (HTTP) 用作服务器和客户端之间的请求-响应协议。 它使它们之间的通信顺…...

怎么把成绩发给家长

亲爱的小伙伴们,作为老师,我们经常需要将学生的成绩发送给家长。但是,手动发送成绩不仅效率低,还容易出错。这时候,我们就需要一个强大的工具——成绩查询系统。它不仅可以轻松实现学生成绩的录入、存储和查询&#xf…...

Banana Pi BPI-W3 RK3588开发板基本使用文档

RK3588编译&烧录Linux固件 1、开发环境及工具准备 Rockchip Linux 软件包:linux-5.10-gen-rkr4 主机: 安装VMware搭建虚拟机,版本为Ubuntu 20.04 (硬盘容量大于100G)安装远程连接工具MobaXterm(可连接虚拟机方…...

源码解析SpringMVC之RequestMapping注解原理

1、启动初始化 核心:得到应用上下文中存在的全部bean后依次遍历,分析每一个目标handler & 目标方法存在的注解RequestMapping,将其相关属性封装为实例RequestMappingInfo。最终将 uri & handler 之间的映射关系维护在类AbstractHand…...

biocParallel学习

我好像做了一个愚蠢的测试 rm(listls()) suppressPackageStartupMessages({library(SingleCellExperiment)library(scMerge)library(scater)library(Matrix) })setwd("/Users/yxk/Desktop/test/R_parallel/") load("./data/exprsMat.RData") load(".…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...