深入理解java虚拟机之内存篇读后感

java应用程序有两种类加载器:
  bootstrap类装载器和用户自定义的类装载器

java安全模型组成(沙箱)

1、类加载器结构
作用:
采用双亲委托机制,在同一个命名空间中,不能存在两个签名相同的类。

2、class文件校验器
  作用
   保证每一个方法在被调用时,方法传入参数正确,变量在使用前赋值,变量类型正确以及一个类的构成是正确无误等。
   在解析变量引用的时候,当涉及到了其他的类,则会去加载这些类,这也是使用了延迟加载策略。

3、内置于java虚拟机的安全特性。

4、安全管理器及javaAPI。

每一个线程都会有一个线程栈,方法会产生栈帧,栈帧存储在线程栈中。



java虚拟机实例的组成

1、方法区
  类信息类中的静态变量字段信息方法信息一个到Class类的引用一个到类ClassLoader的引用
所有线程都共享方法区数据。
  方法区的大小不是固定的,虚拟机可以根据应用的需要动态调整,由于内存分配问题,方法区的存储空间可以不是连续的。
方法区也可以被垃圾收集,每种类型都维护了一个自己的常量池。

2、堆
 一个java虚拟机实例只存在一个堆空间,所有线程都共享这个堆。
 程序并不会主动去释放它,堆空间的管理都是由垃圾收集器来处理的。
 堆空间分为两种设计模式:
  (1)、将堆分为两部分:一个句柄池,一个对象池。句柄池中的句柄每个条目分为两部分,一个指向对象实例,一个指向方法区中的类型数据指针
  这种方式在访问的时候需要进行两次指针传递,但是可以更好的解决碎片,当移动对象池中的对象时,句柄部分只需要改变一下指向新的地址就可以了
  (2)、使对象直接指向一组数据,该数据包含对象实例和方法区类型指针,这样设计的缺点刚好和第一种相反,他可以减少访问次数,但是在进行碎片整理的时候,它必须更新运行时数据区中移动对象的引用。
堆中的对象有一个独立的逻辑部分,用于保存多线程并发访问时的同步。

3、程序计数器
  其中保存的就是一些PC寄存器。

4、java栈
  每启动一个线程,java虚拟机都会为它分配一个java栈,java栈中只会执行两种操作:压栈出栈
  只有通过return返回或者通过抛出异常而中止才会将当前帧释放掉。所以需要对异常进行处理,只有对异常进行处理才会按照正常的流程去执行。如果不对异常进行处理会强制释放掉当前栈帧。
  java栈中的数据,每个线程中都是独立的。
  为什么会造成多线程并发的数据污染问题,就是因为线程中有工作内存,他事先操作的并不是堆中的数据,所以才会造成数据污染。

5、栈帧
  由三部分组成:局部变量区操作数栈帧数据区
  每个方法调用都将获得一个自己的栈帧栈帧其实就是一个内存片段
  对象永远存储在中,永远都不会保存在栈空间中。

6、本地方法栈
  本地方法栈是调用一些比较特殊的方法,这些方法可以直接访问运行时数据区,也可以直接使用操作系统的寄存器。

7、执行引擎
  前面所有的处理,就是为了能够更好的在执行引擎中运行。



this和super的实现

其实是在创建对象的时候java虚拟机自动的添加了一个指向自己的引用,就像局部变量一样了。

方法表

就像操作系统的页表一样,方法表也是负责记录所有类型的地址提高访问效率。
java虚拟机规范没有明确一定要使用方法表。(牺牲空间换时间)

对象内存分配

如何确定一个对象需要多大的内存空间,根据方法区中保存类的信息信息去计算所需的内存大小。
每个类都维护了一个自己的常量池。

java虚拟机实例

一个java应用对应一个java虚拟机实例,一个java虚拟机实例只有一个方法区和一个堆。
虚拟机实例与实例之间的方法区和堆互相独立。

线程和堆交互

每一个java虚拟机实例都有一个主存(堆),用于保存所有的程序变量(对象的实例,类变量等),每一个线程都有一个工作内存(java栈),线程使用的都是主存数据的深度拷贝,每个线程之间都是私有的空间。

线程读取和写入做两件事
  1、把变量的值从主存拷贝到它的工作内存中。
  2、把值从工作内存写回到主存中。

jvm每一个class文件都会有一个常量池。
  本地方法的调用并不会产生一个新的栈帧然后压入java栈,而是将java栈抛在身后,知道本地方法返回以后,java栈才被重新使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值