最近老有人问jvm,恕我直言,完蛋了,不会,慢慢学吧,开始第一个学习,后续补充,走起。。。
我看的他的
我们(肯定不)知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状
CPU的主频不可能无限制的增长,要想很多的提升新能,需要多个处理器协同工作,就是多核
基于高速缓存的存储交互很好的解决了处理器与内存之间的矛盾,也引入了新的问题:缓存一致性问题。在多处理器系统中,每个处理器有自己的高速缓存,而他们又共享同一块内存(下文成主存,
main memory 主要内存),当多个处理器运算都涉及到同一块内存区域的时候,就有可能发生缓存不一致的现象。为了解决这一问题,需要各个处理器运行时都遵循一些协议,在运行时需要将这些协议保证数据的一致性。这类协议包括MSI、MESI、MOSI、Synapse、Firely、DragonProtocol等
--------------------------------------------------我擦,这都是些啥。虚拟机内存模型中定义的访问操作与物理计算机处理的基本一致!
JVM的逻辑内存模型如下:
1、程序计数器
作用可以看做是当前线程所执行的字节码的行号指示器
2、Java 虚拟机栈
它的生命周期与线程相同。虚拟机栈描述的是Java 方法执行的内存模型:每个方法被执
行的时候都会同时创建一个栈帧(Stack Frame ①)用于存储局部变量表、操作栈、动态
链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在
虚拟机栈中从入栈到出栈的过程。
3、本地方法栈
虚拟机栈为虚拟机执行Java 方法(也就是字节码)服务,而本地方法栈则
是为虚拟机使用到的Native 方法服务,就是c写的那些native
4、Java 堆
Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的
一块。Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的
唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存.
Java 堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC 堆”
收集器基本都是采用的分代收集算法,所以Java 堆中还可以细分为:新生代和老年代;
再细致一点的有Eden 空间、From Survivor 空间、To Survivor 空间等
------后边我得开一篇,这里搞不了了,装逼之地总是需要深入研究,看到这里我就想说这tm,哎就差在这里
5、方法区
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。虽
然Java 虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-
Heap(非堆),目的应该是与Java 堆区分开来
很多人愿意把方法区称为“永久代”(Permanent Generation)
--------------------------------------其他的区我不认,因为不懂,懂了再写,爱咋咋的
现在我的理解,比如这个
我自己的学习博客,这个看了容易跟着我跑偏,持续更新