JVM快速入门学习笔记(二)

news2024/11/17 5:31:49

临近过年,事太多,学习效率也好低,最近已经好久没搞学习了,发篇简单的学习笔记意思下吧

5. 沙箱安全机制

Java安全模型的核心就是Java沙箱(sandbox),什么是沙箱?沙箱是一个限制程序运行的环境。沙箱机制就是将 Java 代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本地系统资源访问,通过这样的措施来保证对代码的有效隔离,防止对本地系统造成破坏。沙箱主要限制系统资源访问,那系统资源包括什么?——CPU、内存、文件系统、网络。不同级别的沙箱对这些资源访问的限制也可以不一样

所有的Java程序运行都可以指定沙箱,可以定制安全策略

6. Native

​ 凡是带了native 关键字的,说明java的作用范围达不到了,会去调用底层C 语言的库。
  凡是带了native 关键字的,会进入本地方法栈

调用本地接口:JNI
  JNI作用:扩展Java的使用,融合不同的编程语言为Java 所用!最初C、C++
  它在内存区域中专门开辟了一块标记区域:Native Method Stack,登记native 方法
  在最终执行的时候去加载本地方法库的方法,通过JNI

本地方法接口(JNI)Java Native Interface
  Native Method Stack(本地方法栈):登记native 方法,在执行引擎(Execution Engine)执行的时候。通过JNI 加载**本地方法库(Native Libraies)**中的方法。在企业级应用中少见,与硬件有关应用:java程序驱动打印机,系统管理生产设备等,掌握即可

CAS源码实现也用到了JNI:https://itcgg.blog.csdn.net/article/details/128668246

private native void start0();

调用其他接口:Scoket 、WebService~http

7. PC寄存器

程序计数器: Program Counter Register

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

8. 方法区

Method Area方法区

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

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

面试题:一张白纸,画出对象实例化过程的内存图。(主要是考你对JVM的理解)

栈,堆,方法区的交互

在这里插入图片描述

8.1 方法区概念

Hotspot虚拟机,方法区有个别称non-heap(非堆),方法区可以看作是一块独立于堆的内存空间

  • 方法区与java堆一样,是各个线程共享的内存区域
  • 方法区在jvm启动的时候被创建,并且它的实际的物理内存空间中和java堆区一样都是可以不连续的
  • 方法区的大小,跟堆空间一样,可以选择固定大小或者扩展
  • 方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误java8以前(java.lang.OutOfMemoryError:PermGen space)或者java8以后(java.lang.OutOfMemoryError:Metaspace)
  • 关闭jvm就会释放这个区域的内存

8.2 处理OOM

  • OOM或者heap space异常,一般使用内存映像分析工具对dump出来的堆存储快照分析,分析是内存泄漏还是内存溢出
  • 如果是内存泄漏,可进一步通过查看GC roots的引用链,查找到泄漏对象是通过怎样的路径与GC Roots相关联并导致垃圾收集器无法自动回收。
  • 如果不是内存泄漏,那就是说对象必须存活,此时需要增加虚拟机的参数(-Xmx和-Xms)。

8.3 方法区内部结构

方法区存储信息主要:类型信息,域(Field)信息,方法(Method)信息,常量,静态变量,即时编译器编译后的代码缓存

8.3.1 类型信息

对每个加载的类型(类class、接口、枚举、注解),jvm必须在方法区存储以下类型信息

  • 类型的完整有效名称(全名=包名.类名)
  • 类型直接父类的完整有效名(接口和java.lang.Object,没有父类)
  • 类型的修饰符(public,abstract,final的某个子集)
  • 类型直接接口的一个有序列表

8.3.2 域(Field)信息

  • 保存类型的所有域的相关信息以及域的声明顺序
  • 域的相关信息:域名称,域类型,域修饰符(public,private,protected,static,final,volatile,transient)

8.3.3 方法(Method)信息

jvm保存所有方法的以下信息,同域信息一样的包括声明顺序

  • 方法名称
  • 方法返回参数(或者void)
  • 方法参数的数量和类型(按顺序)
  • 方法的修饰符(public,private,protected,static,final,synchronized,native,abstract)
  • 方法的字节码,操作数栈、局部变量表及大小(abstract和native除外)
  • 异常表(abstract和native除外),每个异常处理的开始位置,结束位置,代码处理在程序计数器中的偏移地址、被捕获的异常类的常量池索引。

8.3.4 常量池

一个有效的字节码文件除了包含类的版本信息,字段,方法以及接口等描述信息外,还包含一项信息那就是常量池,包含各种字面量(数量值,字符串值)和对类型(类),域和方法的符号引用

常量池,可以看作是一个表,虚拟机指令根据这张常量表找到要执行的类名,方法名,参数类型,字面量等类型

作用

一个java源文件的类,接口,编译后产生一个字节码文件。而java中字节码需要数据支持,通常这种数据会很大以至于不能直接存储在字节码里,换一种方式,可以存储到常量池里。

8.3.5 方法区的垃圾回收

方法区的回收效果不好,尤其是对类型的卸载,条件很苛刻,但是回收方法区又是必要的。

  1. 方法区的垃圾回收主要回收两部分
    • 常量池中废弃的常量
    • 不再使用的类型,需要将其卸载
  2. 判定一个类型是否能被卸载的条件
    • 该类所有的实例都已经被回收,java堆中不存在该类以及任何派生子类的实例
    • 加载该类的加载器已经被回收。
    • 该类对应的java.lang.Class对象没有任何地方被引用,没有任何地方通过反射访问该类的方法

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle 12c多租户特性详解:从Schema到PDB的变化与隔离

CDB和PDB的职责分离一些数据库管理员管理整个CDB,而另一些管理员管理单个的pdb。.管理整个CDB的dba作为普通用户连接到CDB,管理整个CDB和根的属性,以及pdb的一些属性。例如,这些dba可以创建、拔出、插入和删除pdb。它们还可以为根…

【c语言】文件操作详解

主页:114514的代码大冒险 qq:2188956112(欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ ) Gitee:庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 目录 前言 一、文件是什么 二、文件的打开和关闭 1.文件指针 2.文件的打开和关闭 三,文件的顺…

《计算机体系结构量化研究方法》 B.4 虚拟存储器 笔记

B.4 虚拟存储器 一、基本概念 1、虚拟存储器把物理存储器划分成块以后分配给不同的进程;采用一种保护机制来限制各个进程,使其仅能访问属于自己的块。 2、重定位机制允许同一程序在物理存储器中的任意位置运行。 3、页和段用于块,缺页错误…

SSM框架整合入门案例

文章目录SSM整合案例1,SSM整合1.1 流程分析1.2 整合配置步骤1:创建Maven的web项目步骤2:添加依赖步骤3:创建项目包结构步骤4:创建SpringConfig配置类步骤5:创建JdbcConfig配置类步骤6:创建MybatisConfig配置类步骤7:创建jdbc.properties步骤8:创建Spring…

《Buildozer打包实战指南》第七节 常见的打包问题

目录 无法访问xxx网址,连接超时 目标路径xxx已经存在,并且不是一个空目录 每次打包时间都要很久 待更新 在打包过程中难免会碰到一些问题,在本节,笔者会把自己碰到的一些问题的解决方案写出来,好让读者节省时间。 …

KaiwuDB CTO 魏可伟:1.0 时序数据库技术解读

大家好,首先非常感谢大家参与本次 KaiwuDB 1.0 系列产品发布会。作为国内数据库新生品牌力量,KaiwuDB 是浪潮集团控股的数据库企业,我们聚焦在工业物联网、数字能源、交通车联网、智慧产业等快速发展的重要领域,希望为各大行业客户…

06技术太卷我学APEX-技术太卷我学APEX

06技术太卷我学APEX-技术太卷我学APEX 0 概述 自学APEX第7天,用APEX做了一个自学的笔记APP,名称就叫《技术太卷我学APEX》 1 登录页面 登录页面设置:就改了下名称和加上了测试账号。 登录页面效果: 这个是 APEX功能页面之一…

前端面试题合集-第一篇

前端面试题合集-第一篇 🔔每周不定时更新! ⛄️不要让自己失去竞争力! ☀️哪里都不是避风港,保持竞争力! 1. CSS选择器的优先级 !important>内联>id选择器>类选择器>标签选择器>通配符选择器>继承 在同一…

Java IO流补充 - Properties - IO流框架commons-io

文章目录IO流补充知识Properties结合IO流集合IO流框架IO流补充知识 Properties结合IO流集合 我们先来认识Properties属性集对象 Properties其实就是一个Map集合,但是我们一般不会当集合使用,因为HashMap更好用。 Properties核心作用: 属性文件&#xf…

设计模式_行为型模式 -《观察者模式》

设计模式_行为型模式 -《观察者模式》 笔记整理自 黑马程序员Java设计模式详解, 23种Java设计模式(图解框架源码分析实战) 概述 定义 观察者模式,又被称为发布-订阅(Publish / Subscribe)模式&#xff0c…

RSA与证书

这篇文章详细讲述一下RSA与证书的相关内容。内容有点多,但都是干货。 一、RSA算法 1.1简介 RSA算法是由美国三位科学家Rivest、Shamir和Adleman于1976年提出并在1978年正式发表的公开密码算 法,其命名取自三位创始人名字的首字母缩写。该算法基于数论…

CSS 计数器

CSS 计数器 CSS 计数器可让你根据内容在文档中的位置调整其显示的外观。例如,你可以使用计数器自动为网页中的标题编号,或者更改有序列表的编号。 本质上 CSS 计数器是由 CSS 维护的变量,这些变量可能根据 CSS 规则跟踪使用次数以递增或递减…

【Git】利用 GIT 做版本控制

目录 写在前面 备份方法 效果展示 写在前面 在做项目开发时,不免需要进行版本更替或者使增加新功能等,这时很重要的环节是对版本进行备份,以便在新版本开发过程中出现问题,而当工程文件过大时,在对文件备份时需要占…

Java——多线程01(创建和启动,优先级调度,守护线程,出让/礼让线程,插队/插入线程)

目录1.多线程的创建和启动方式1.线程第一种启动方式(继承Thread类)2.多线程的第二种启动方式实现Runnable接口3.多线程的第三种启动方式实现Callable接口2.Thread多线程中的方法1.getName(), setName(),currentThread(),sleep2.Thread优先级调度方法3.守…

【手把手教你学会51单片机】数码管的动态显示

注:本文章转载自《手把手教你学习51单片机》!因转载需要原文链接,故无法选择转载! 如若侵权,请联系我进行删除!上传至网络博客目的为了记录自己学习的过程的同时,同时能够帮助其他一同学习的小伙…

类的初始化2023018

类的初始化: 第一次使用某个类,例如Person类,系统通常会在第一次使用Person类时加载这个类并初始化这个类。在类的准备阶段,系统将会为该类的类变量分配内存空间,并指定默认初始值。当Person类初始化完成后&#xff0c…

高并发系统设计-Feed流系统设计

有两种实现方式:push和pull实现,首先讨论push模式 概念 我们在讲如何设计Feed流系统之前,先来看一下Feed流中的一些概念: Feed:Feed流中的每一条状态或者消息都是Feed,比如朋友圈中的一个状态就是一个Fe…

布隆过滤器算法

目录布隆过滤器主要有下面的参数:结论举例布隆过滤器主要有下面的参数: 1.假设数据量为n,预期的失误率为p(布隆过滤器大小和每个样本的大小无关)。 2.根据n和p,算出BloomFilter一共需要多少个bit位&#x…

【年度总结 | 2022】想干什么就去干吧,少年

🤵‍♂️ 个人主页: 计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。 程序人生专栏 | 年度总结 ( 2022 ) 作者: 计算机魔术师 版本: 1.0 &#xff08…

关于性能测试需要知道的

随着各企业的业务发展、用户量以及数据量的不断增加,系统承载的压力也会随之增加,服务系统的性能好坏又严重影响企业的利益。因此,性能测试重要性与需求越来越强烈。 常见的性能测试目的 性能测试是确定系统在特定工作负载下的稳定性和响应…