软件设计之JVM(1)

软件设计之JVM(1)

此篇应在MySQL之后进行学习:
路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
尚硅谷JVM精讲与GC调优教程(宋红康主讲,含jvm面试真题)
资料可以去尚硅谷官网免费领取

学习内容:

  1. JVM流程
  2. 类加载器
  3. Native和JNI

1、JVM流程

在这里插入图片描述

2、类加载器

  • 启动类加载器: 加载Java核心类库(如rt.jar),是所有类加载器的根,不直接用Java编写,而是用C/C++实现,确保Java的基本运行环境
  • 扩展类加载器: 加载Java扩展库(如lib/ext目录下的类),允许Java平台扩展功能,确保应用可以使用外部库而不需要修改核心库,启动类加载器是其父类加载器
  • 应用类加载器: 加载用户类路径下的类(如classpath下的类),是开发者最常用的类加载器,确保应用程序能够访问其定义的类,扩展类加载器是其父类加载器
  • 自定义类加载器: 开发者可以扩展ClassLoader类,创建自定义加载器以实现特殊的加载需求(如从网络加载类)

双亲委派机制

在这里插入图片描述

沙箱安全机制

沙箱安全机制是一种用于限制程序或进程对系统资源访问的安全技术。它通过在一个受控的环境中运行应用程序,确保这些应用程序无法对主系统产生负面影响或访问敏感数据。
在这里插入图片描述

3、Native和JNI

JVM中可以调用的本地方法,通常是用C或C++编写的。通过Java Native Interface (JNI),Java程序可以与本地库进行交互,以利用特定平台的功能或提高性能。具体流程如下:
在这里插入图片描述

4、栈(Stack)

栈溢出(Stack Overflow): 当栈的深度超过JVM设定的限制时,会抛出StackOverflowError。通常是由于递归调用过深导致的。
内存管理: 栈的内存是由JVM自动管理的,栈帧的创建和销毁是自动进行的,无需手动释放。
栈的线程安全性: 由于每个线程有独立的栈,因此栈本身是线程安全的,不需要额外的同步机制。

在这里插入图片描述

5、堆(Heap)

JVM分类

IBM J9 现已成为Eclipse基金会的一个项目,名为Eclipse OpenJ9,继续向社区开放并进行发展。
在这里插入图片描述

堆结构

在这里插入图片描述

元空间

在早期的HotSpot JVM实现中,堆不仅用于存放普通对象和数组,还包括了永久代,用于存储类的元数据,如类的结构、常量、静态变量等。
从Java 8开始,永久代被元空间(Metaspace) 取代,元空间使用本地内存而不是堆内存,解决了永久代的内存限制问题。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值