JVM简单了解

JVM的简单介绍

一、jvm内存模型

jvm内存

native: 关键字,用于方法上,表示调用本地方法,通过JNI调用本地方法库,java到达不了的范围。
jvm运行时数据区专门开辟了本地方法栈,用来登记native方法。

PC寄存器: 即程序计数器,program counter register。每个线程都有一个程序计数器,是线程私有的,其实是一个指针,指向方法区中的字节码。用来存储指向下一条指令的地址,是一个非常小的内存空间,几乎可忽略不计。

方法区:被所有线程共享,所有字段和方法字节码,及一些特殊方法。类信息、运行时常量池、字段信息、方法信息、静态变量、构造方法、接口定义、类加载器的引用、Class 实例的引用、方法表等。 jdk版本不同,有所区别。
参考:
https://www.jianshu.com/p/59f98076b382
JDK1.6中Class实例在方法区,而且和JDK7创建流程有了很大差异;
JDK7创建Class实例存在堆中;因为JDK7中JavaObjectsInPerm参数值固定为false。
JDK8移除了永久代,转而使用元空间来实现方法区,创建的Class实例在java heap中。
方法区

:栈内存主管程序运行、生命周期和线程同步;线程结束,占内存释放,对于栈内存不存在垃圾回收问题。
8种基本类型变量、对象引用,实例的方法(栈帧形式)。
栈帧:一个方法的执行=一个栈帧对入栈出栈,栈帧基本信息包括方法索引、输入输出参数、本地变量、class file
引用、父帧引用、子帧引用等。程序正在运行的方法栈帧在顶部。
栈帧
实际结构并非如上图,这里知识初学时方便理解的简单示意。
栈满异常:StackOverflowError

:一个JVM只有一个堆,其大小可以调节。IDEA可以通过Edit Configration的VM Option配置。
存储类信息、变量、常量、对象(方法区也是堆的一部分),相对栈存放的是引用,堆放对象本身,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)。
堆主要分三部分:

  • 新生区(Young Generation,常称为YoungGen) 新:老 = 1:2
    新生代又分为:伊甸园区Eden Space + 幸存Survior from区 + 幸存Survior to区,比例 8 : 1 : 1。
    新生对象存放于Eden区,经历过 轻量GC 回收而幸存的对象,进入幸存区,0区和1区是动态变换的,对象总是from 0区转移到1区。经历过固定次数(15次)的轻量GC回收依然幸存的对象,将进入老年区存放。
  • 老年代(Old Generation,常称为OldGen、TenuringGen)
    经历过15次轻量GC存放对象的区域,快满的时候进行FULL GC。GC主要作用域在新生代和老年代。
    如果堆内存真满了,报OOM错误,OutOfMemoryError:java heap space。
  • 永久区(Permanent Generation,常称为PermGen)–非堆内存
    该区域内容常驻内存,用来存放JDK自身携带的class对象信息、接口元数据、java运行时的一些环境或类信息。该区域不存在垃圾回收,关闭jvm会释放。JDK8前是方法区的实现;JDK8以后,永久区被元空间取代。
    在HotSpot中,方法区仅仅只是逻辑上的独立,实际上还是包含在Java堆中,也是就说,方式区在物理上属于Java堆区中的一部分,而永久区(Permanent Generation)就是方法区的实现。
    方法区的实现的演变:
    Jdk1.7之前:hotspot虚拟机对方法区的实现为永久代 ;
    Jdk1.8及之后:hotspot移除了永久代用 元空间(Metaspace)。

运行时常量池存 和 字符串常量池 的变化
JDK1.7之前 :
运行时常量池(包含 字符串常量池 )存放在 方法区,此时 hotspot 虚拟机对方法区的实现为永久代。
JDK1.7 :
字符串常量池 被从方法区拿到了堆中;
运行时常量池 剩下的东西还在 方法区, 也就是hotspot中的永久代。
JDK1.8 :
hotspot移除了 永久代,用 元空间(Metaspace) 取而代之。这时候,
字符串常量池还在堆,运行时常量池 还在方法区,只不过方法区的实现从永久代变成元空间(Metaspace)。*字符串常量池中的字符串和普通对象一样,初始位于新生代,随着代数的增加,会被挪到老年代中。https://blog.csdn.net/weixin_38308374/article/details/110674739

二、类加载机制

三、沙箱安全机制

四、三种jvm

  1. sun公司的HotSpot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值