首页 > 其他 > 详细

jvm 这我就能会了 擦

时间:2019-05-16 16:35:46      阅读:131      评论:0      收藏:0      [点我收藏+]

最近老有人问jvm,恕我直言,完蛋了,不会,慢慢学吧,开始第一个学习,后续补充,走起。。。

我看的他的https://www.cnblogs.com/dingyingsi/p/3760447.html

我们(肯定不)知道,计算机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)


 

--------------------------------------其他的区我不认,因为不懂,懂了再写,爱咋咋的

现在我的理解,比如这个https://www.cnblogs.com/yb38156/p/9409189.html

技术分享图片

 

我自己的学习博客,这个看了容易跟着我跑偏,持续更新

 

jvm 这我就能会了 擦

原文:https://www.cnblogs.com/jianzhixuan/p/10875974.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!