精华内容
下载资源
问答
  • JVM组成部分以及内存模型

    千次阅读 2014-10-17 13:58:45
    一、JVM的组成部分 我们先把JVM这个虚拟机画出来,如下图所示: 从这个图中可以看到,JVM是运行在操作系统之上的,它与硬件没有直接的交互。我们再来看下JVM有哪些组 成部分,如下图所示:   1、 Class Loader 类...

     一、JVM的组成部分


    我们先把JVM这个虚拟机实现机制画出来,如下图所示:


    从这个图中可以看到,JVM是运行在操作系统之上的,它与硬件没有直接的交互。我们再来看下JVM有哪些组

    成部分,如下图所示:


    1、 Class Loader 类加载器

    类加载器的作用是加载类文件到内存,比如编写一个HelloWord.java程序,然后通过javac编译成class文件,

    那怎么才能加载到内存中被执行呢?Class Loader承担的就是这个责任,那不可能随便建立一个.class文件就能

    被加载的,Class Loader加载的class文件是有格式要求,在《JVM Specification》中式这样定义Class文件的

    结构:

    ClassFile {

    u4 magic;

    u2 minor_version;

    u2 major_version;

    u2 constant_pool_count;

    cp_infoconstant_pool[constant_pool_count-1];

    u2 access_flags;

    u2 this_class;

    u2 super_class;

    u2 interfaces_count;

    u2 interfaces[interfaces_count];

    u2 fields_count;

    field_info fields[fields_count];

    u2 methods_count;

    method_info methods[methods_count];

    u2 attributes_count;

    attribute_info attributes[attributes_count];

    }


    友情提示:Class Loader只管加载,只要符合文件结构就加载,至于说能不能运行,则不是它负责的,那是

    由Execution Engine负责的。

    2、 Execution Engine 执行引擎

    执行引擎也叫做解释器(Interpreter),负责解释命令,提交操作系统执行。

    3、Native Interface本地接口

    本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序,Java诞生的时候是C/C++横行的时候,要想立足,必须有一个聪明的、睿智的调用C/C++程序,于是就在内存中专门开辟了一块区域处理标记为native的代码,它的具体做法是Native Method Stack中登记native方法,在Execution Engine执行时加载native libraies。目前该方法使用的是越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印机,或者Java系统管理生产设备,在企业级应用中已经比较少见,因为现在的异构领域间的通信很发达,比如可以使用Socket通信,也可以使用Web Service等等,不多做介绍。

    4、 Runtimedata area运行数据区

    运行数据区是整个JVM的重点。我们所有写的程序都被加载到这里,之后才开始运行,Java生态系统如此的繁荣,得益于该区域的优良自治,下面会详细介绍。整个JVM框架由加载器加载文件,然后执行器在内存中处理数据,需要与异构系统交互是可以通过本地接口进行,这样构成了一个完整的系统。

    二、 JVM的内存管理

    所有的数据和程序都是在运行数据区存放,它包括以下几部分:

    1、Stack 栈

    栈也叫栈内存,是Java程序的运行区,是在线程创建时创建,它的生命期是跟随线程的生命期,线程结束栈内

    存也就释放,对于栈来说不存在垃圾回收问题,只要线程一结束,该栈就Over。问题出来了:栈中存的是那些

    数据呢?又什么是格式呢?

    栈中的数据都是以栈帧(Stack Frame)的格式存在,栈帧是一个内存区块,是一个数据集,是一个有关方法(Method)和运行期数据的数据集,当一个方法A被调用时就产生了一个栈帧F1,并被压入到栈中,A方法又调用了B方法,于是产生栈帧F2也被压入栈,执行完毕后,先弹出F2栈帧,再弹出F1栈帧,遵循“先进后出”原则。

    那栈帧中到底存在着什么数据呢?栈帧中主要保存3类数据:本地变量(Local Variables),包括输入参数和输出参数以及方法内的变量;栈操作(Operand Stack),记录出栈、入栈的操作;栈帧数据(Frame Data),包括类文件、方法等等。光说比较枯燥,我们画个图来理解一下Java栈,如下图所示:


    图示在一个栈中有两个栈帧,栈帧2是最先被调用的方法,先入栈,然后方法2又调用了方法1,栈帧1处于栈顶的位置,栈帧2处于栈底,执行完毕后,依次弹出栈帧1和栈帧2,线程结束,栈释放。

    2、 Heap 堆内存

    一个JVM实例只存在一个堆类存,堆内存的大小是可以调节的。类加载器读取了类文件后,需要把类、方法、

    常变量放到堆内存中,以方便执行器执行,堆内存分为三部分:

    (a)Permanent Space 永久存储区

    永久存储区是一个常驻内存区域,用于存放JDK自身所携带的Class,Interface的元数据,也就是说它存储的是运

    行环境必须的类信息,被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭JVM才会释放此区域所占用

    的内存。

    (b)Young Generation Space 新生区

    新生区是类的诞生、成长、消亡的区域,一个类在这里产生,应用,最后被垃圾回收器收集,结束生命。新生区又分为两部分:伊甸区(Eden space)和幸存者区(Survivor pace),所有的类都是在伊甸区被new出来的。幸存区有两个: 0区(Survivor 0 space)和1区(Survivor 1 space)。当伊甸园的空间用完时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收,将伊甸园区中的不再被其他对象所引用的对象进行销毁。然后将伊甸园中的剩余对象移动到幸存0区。若幸存0区也满了,再对该区进行垃圾回收,然后移动到1区。那如果1区也满了呢?再移动到老年代

    (c)Tenure generation space 老年代

    养老区用于保存从新生区筛选出来的JAVA对象,一般池对象都在这个区域活跃。三个区的示意图如下:




    3、Method Area 方法区

    方法区是被所有线程共享,该区域保存所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在

    此定义。

    4、PC Register 程序计数器

    每个线程都有一个程序计数器,就是一个指针,指向方法区中的方法字节码,由执行引擎读取下一条指令。

    5、Native Method Stack 本地方法栈

     


    展开全文
  • 内存条常识

    千次阅读 2015-11-22 22:48:49
     内存是电脑必不可少的组成部分,CPU可通过数据总线对内存寻址。  历史上的电脑主板上有主内存,内存条是主内存的扩展,以后的电脑主板上没有主内存,CPU完全依赖内存条。所有外存上的内容必须通过内存才能发挥...

    内存条常识


              什么是内存条?

              内存条是CPU可通过总线寻址,并进行读写操作的电脑部件。


              内存条的作用?

              内存是电脑必不可少的组成部分,CPU可通过数据总线对内存寻址。

              历史上的电脑主板上有主内存,内存条是主内存的扩展,以后的电脑主板上没有主内存,CPU完全依赖内存条。所有外存上的内容必须通过内存才能发挥作用。




              内存的分类?

              内存分为RAM和ROM两种。

              前者又叫动态随机存储器,它的一个主要特征是断电后数据会丢失,我们平时说的内存就是指这一种,现在的电脑多数为4G内存。

              后者又叫只读存储器,我们平时开机首先启动的是存于主板上ROM中的BIOS程序,然后再由它去调用硬盘中的Windows,ROM的一个主要特征是断电后数据不会丢失。


              内存和外存的区别?

              写入RAM(即读写内存,即内存条)中的数据将在断电后彻底消失,电脑开机时CPU最早读入执行的程序数据来自ROM(只读内存)。

              内存是电脑(包括单片机在内)的基础部件,从有电脑那天起就有了内存。

              而外存属于电脑外围设备,硬盘是经过磁带、软盘阶段之后发展产生的外存。

              现在的笔记本电脑大多数都是500G的外存。


              拓展内存注意事项?

              查看电脑的主板支持几个内存条?

              电脑的型号不同,主板也不相同,有的人想拓展内存,但是电

    脑的主板上只有一个内存条插口,所以添加内存条是不可能的,只有换一个容量更大的内存条。

              台式电脑一般情况下都是两个插槽,而笔记本有的主板上是一个内存条插槽,有的是两个插槽。


              查看电脑主板支持最大的内存?




              任何一个主板都有最大支持内存容量,比如上图:

              买电脑的时候,或者直接查询主板的型号,都可以看到这个电脑最大内存容量,这个电脑为例,自带内存为4GB,最大支持内存容量为16GB。


              查看SPD——内存条插槽的电压?

              内存条分为标准版和低压版的,两者有何区别?

              简单的说就是标准版的电压为1.5V,而低压版的为1.35V的,买内存条之前先查看自己电脑主板的SPD插槽,是否为低压版的。

              标准版和低压版,它们的性能和各自的用途都不相同,各自有各自的用途和优点与缺点。


              查看SPD——内存条的型号?

              内存条按照发展,近代的的可以分为DDR,DDR2,DDR3,DDR4等等,说白了就是1代内存,2代内存,3代和4代内存条,每一代内存条都是不同的。

              主板的插槽决定了内存条的型号,每一个主板支持的内存条的型号都是固定的,就是支持几代的,因为它们缺口的位置是不同的。


     


              就是说,如果主板上的是2代的内存条,买了一个3代的是不能使用的,根本就插不上去,缺口和金手指的位置是不同的。


    展开全文
  • 一、Java运行时内存中的数据区域: 每一个Java程序启动后,会获得一个JVM的实例,用来管理内存。Java 虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有个字的用途,以及...

    一、JVM 主要组成部分:

     JVM包含两个子系统和两个组件,分别为:

    • Class loader(类装载子系统):根据给定的全限定名类名来装载class文件到运行时数据区的方法区中
    • Execution engine(执行引擎子系统):执行引擎也叫解释器,负责解释class的指令,在提交给操作系统执行
    • Runtime data area(运行时数据区组件):即我们常说的JVM的内存
    • Native Interface(本地接口组件):与native lib交互,它的作用是融合不同的编程语言为Java所用,是其它编程语言交互的接口

            首先通过编译器把 Java源代码转换成字节码,Class loader(类装载)再把字节码加载到内存中,将其放在运行时数据区的方法区内,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。

    二、JVM 内存区域:

    JVM 在执行 Java 程序时,会将内存划分为若干个不同的数据区域,不同的区域用途不同,创建和销毁时间也不相同。在 JDK1.8 版本之后对运行时数据区域做了些修改,下面我们分别来看看修改前后的内存区域是怎么样的。

    1、JDK1.8之前的JVM内存区域如下图:

    2、JDK8之后的JVM内存区域如下图:

    3、各区域的的作用:

    (1)程序计数器:

    当前线程执行的字节码的行号指示器,记录当前线程执行到程序的哪个位置,通过改变计数器的值,可以选取下一条需要执行的字节码指令。该区域是线程私有,是唯一一个不会发生OOM的区域。

    (2)Java虚拟机栈:

    描述 Java 方法执行的内存模型,每个方法执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用到执行完成,就对应着一个栈帧在虚拟机中入栈到出栈的过程。该区域线程私有,生命周期与线程的生命周期相同。

    (3)本地方法栈:

    本地方法栈的作用和虚拟机栈的作用非常相似,区别是本地方法栈则为Native方法服务,而虚拟机栈为执行java方法服务,该区域也是线程私有。

    (4)Java堆:

    用于存储对象实例,是占用内存最大的区域,可划分为新生代和老年代,新生代又可细分为 Eden区、From Survivor区、To Survivor区。

    在 HotSpot 中,对象在堆内存布局分成三部分:对象头,实例数据,对齐填充。

    ① 对象头:包括两部分的信息:

    • 运行时数据:用于存储对象自身的运行时数据,如哈希码,GC代年龄,锁状态标志、线程持有的锁、偏向线程ID等。
    • 类型指针:即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。如果对象是一个Java数组,那对象头中还必须有一块用于记录数组长度的数据。

    ② 实例数据:是对象真正存储的有效信息,是在程序代码中所定义的各种类型的字段内容,相同宽度的字段会被分配到一起。

    ③ 对齐填充:并不是必然存在的,仅起着占位符的作用。

    (5)方法区:

            用于存储类信息,包括运行时常量池、静态变量、常量、即时编译后的代码(即class文件)等数据。与Java堆一样不需要连续的内存,并且可以动态扩展,动态扩展失败会抛出 OOM 异常,该区域被所有线程共享。对这块区域进行垃圾回收的主要目标是对常量池的回收和对类型的卸载,但是一般比较难实现。

            方法区是一个 JVM 规范,永久代与元空间都是其一种实现方式。JDK8 之前,Hotspot 中方法区的实现是永久代(Perm),JDK8 开始使用元空间(Metaspace),以前永久代的静态变量和常量池移至堆内存,其他内容移至元空间,元空间直接在本地内存分配。那为什么要使用元空间取代永久代的实现?主要是为了方便管理方法区:

    ① 永久代的方法区,和堆使用的物理内存是连续的。对于永久代,由于类及方法的信息等比较难确定其大小,所以指定永久代的大小比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出,并且每次 Full GC 之后永久代的大小都会改变,如果动态生成很多 class 的话,就很可能出现 OOM,毕竟永久代的空间配置有限。

    ② JDK8之后,方法区存在于元空间,物理内存不再与堆连续,而是直接存在于本地内存中,理论上机器内存有多大,元空间就有多大。

    ③ 字符串存在永久代中,容易出现性能问题和内存溢出。

    ④ 永久代会为 GC 带来不必要的复杂度,并且回收效率偏低

    参考文章:Java内存区域(运行时数据区域)和内存模型(JMM) - czwbig - 博客园

    展开全文
  • 电脑加了内存条开不了机的原因:1、如果只有其中1条内存能开机,说明另一条内存是坏的。2、如果两条内存单独都可以开机,在一起就不能开机,说明有严重的兼容性问题。3、如果两条内存都不能开机,那可能是内存都是坏...

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。

    电脑加了内存条开不了机的原因:

    1、如果只有其中1条内存能开机,说明另一条内存是坏的。

    2、如果两条内存单独都可以开机,在一起就不能开机,说明有严重的兼容性问题。

    3、如果两条内存都不能开机,那可能是内存都是坏的,或电脑坏了。用替换法可以确定。

    电脑(computer,又称计算机)是一种用于高速计算的电子计算机器,被称为“20世纪最先进的科学技术发明之一”。电脑由硬件系统和软件系统所组成,具有进行数值计算、逻辑计算和存储记忆等多项功能。它的应用领域从最初的军事科研应用扩展到社会的各个领域,带动了全球范围的技术进步。主板又叫Mother Board(母板)。它其实就是一块电路板, 上面密密麻麻都是各种电路。它可以说是PC机的神经系统,CPU、内存、显示卡、声卡等等都是直接安装在主板上的,而硬盘、软驱等部件也需要通过接线和主板连接。主机 一般将放置在机箱中的电脑部件总称为“主机”。它是电脑的最主要组成部分,主板、CPU和硬盘等主要部件均在主机内。

    展开全文
  • 联想R720安装原装内存条图文过程

    万次阅读 多人点赞 2019-04-22 14:58:21
    博主的电脑型号是是联想R720,...1. 首先百度查找R720原装内存条型号:大部分都说是三星8g内存频率为2400Mhz的条,少部分说是Ramaxel(记忆科技)的8g内存频率为2666Mhz的内存条。拿不定注意,就继续查下去。 2.接下...
  • JVM内存区域分为五个部分,分别是堆,方法区,虚拟机栈,本地方法栈,程序计数器。 JVM内存区域 堆。 堆是Java对象的存储区域,任何用new字段分配的Java对象实例和数组,都被分配在堆上,Java堆可使用-Xms -...
  • 教你怎样维修内存条

    千次阅读 2017-01-18 18:03:00
    上个月,在玩Photoshop时,电脑忽然没有反应,画面静止不动,机器无法重新启动,我打开机箱,拔出内存条一看,一个小元件的焊点已熔化,不禁想起前段时间机器有数次启动自检显示乱码死机,重启动又正常的情况,再把内存条拿到...
  • B部分标明的是该内存模组的生产日期,以三个阿拉伯数字的形式表现。第一个阿拉伯数字表示生产的年份,后面两位数字表明是在该年的第XX周生产出来的。如上图中的517表示该模组是在05年的第17周生产的。C部分表示该...
  • 计算机组成原理——组成部分

    千次阅读 2020-01-18 11:04:37
    文章目录1 计算机的总线1.1 总线概述1.2 总线的仲裁2 计算机的输入输出设备2.1 常见的输入输出设备...内存4.2 辅存储器——磁盘5 计算机的高速缓存5.1 高速缓存的工作原理5.2 高速缓存的替换策略6 计算机的指令系统...
  • JVM的组成部分

    千次阅读 2018-10-09 11:05:56
    我们先把JVM这个虚拟机画出来,如下图所示: virtual虚拟机 Machine 机械 java Virtual Machine (java ...该图参考了网上广为流传的JVM构成图,大家看这个图,整个JVM分为四部分: q Class Loader 类加载器 类...
  • 计算机硬件的五大组成部分

    千次阅读 2020-10-09 16:35:45
    五大组成部分 控制器:计算机的指挥系统,负责控制所有硬件的运行 运算器:负责数学运算和逻辑运算 控制器+运算器+寄存器 -> cpu(中央处理器) 存储器: 内存:比如内存条 基于电存取数据,断点数据全部丢失 ...
  • 内存条的逻辑BANK和RANK(物理BANK)概念

    千次阅读 多人点赞 2019-10-02 10:31:04
    内存条的逻辑BANK和RANK(物理BANK)概念 在内存上有一个参数:2R X16,1R X16, 1R X8….. 这里的R就是Rank 既物理BANK,X16,X8,是指芯片位宽 何谓内存BANK: 内存的BANK其实分为两部分,逻辑BANK和物理BANK。 ...
  • JVM 内存模型组成+经典总结

    千次阅读 2020-10-06 16:08:10
    我们先来看看内存模型的组成(Java 8) 其中需要注意的几个点: 线程私有:私有数据区域其它线程不可见,生命周期随着线程的的启动而创建,线程结束而销毁。 线程共享:所有线程可见,生命周期跟随着JVM的启动/...
  • 内存条的主要技术指标

    千次阅读 2013-07-24 00:24:45
    1 内存容量 内存容量是指存放计算机运行所需的程序和数据的多少。内存容量直接关系到计算机的整体性能,是除CPU之外能表明计算机档次等级的一个重要指标。目前,主流计算机的内存容量一般为128MB、256MB和512MB。 ...
  • Java虚拟机组成部分及作用

    千次阅读 2018-04-03 18:25:54
    当我们讨论到它的组成部分的时候,有人可能很多都会说是以栈和堆,但是实际上远远不止这两个部分。 下面我们来讲讲他的组成部分: JVM分为两个区域: 一、线程私有区域 包含虚拟机栈(通常称为Java栈)、本地...
  • 内存系列一:快速读懂内存条标签 内存是我们平常接触最频繁的计算机硬件之一,内存的大小、多寡和型号和我们计算机、手机等性能密切相关。内存系列计划通过三篇文章由浅入深介绍内存的软硬件特性以及与固件的关系。...
  • jvm 五个组成部分

    千次阅读 2017-12-06 21:30:39
    几乎不占内存,用于取下一指令 共享:{ 2)堆,所有通过new创建的对象的内存都在堆中分配,堆被划分为新生代和老年代。新生代有进一步划分为 Eden和Survivor区,最后Survivor由FromSpace和ToSpace...
  • 文章目录一个例子 :电影是如何播放的机箱内部各部分介绍各组成部分介绍与用途①、主板②、CPU③、硬盘④、内存⑤、显卡“集成显卡” 与 “独立显卡”的区别⑥、电源 一个例子 :电影是如何播放的   首先要双击...
  • 电脑内存条C14和C16的区别是什么?

    万次阅读 2019-09-12 09:47:59
    1、时序不同 也就是响应时间不同,单位为时钟周期。 2、性能不同 其他条件相同的情况下,数字越小性能越好。 3、价格不同 ...其他条件相同的情况下,数字越小...内存时序包含描述同步动态随机存取存储器(SDRAM)...
  • linux内核的组成部分

    千次阅读 2013-10-15 19:59:03
    Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。 1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程...
  • 内存条的BANK数是指什么

    千次阅读 2009-04-06 19:04:00
    内存芯片的逻辑BANK 在芯片的内部,内存的数据是以位(bit)为单位写入一张大的矩阵中,每个单元我们称为CELL,只要指定一个行(Row),再指定一个列(Column),就可以准确地定位到某个CELL,这就是内存芯片寻址的...
  • 计算机各个组成部分介绍

    千次阅读 2011-10-25 13:39:10
       CPU 简介  CPU(Central Processing ...是一台电脑的核心,相当于人的大脑,它的内部结构分为控制单元、逻辑单元和存储单元三大部分。目前CPU主要接   CPU 口类型有两种:一种是INTEL的LGA775(又称为
  • Linux内核组成部分(一)

    千次阅读 2019-01-11 10:31:38
    内核的任务 在纯技术层面上,内核是...例如,在内核寻址硬盘时,它必须确定使用哪个路径来从磁盘向内存复制数据,数据的位置,经由哪个路径向磁盘发送哪一命令,等等。另一方面,应用程序只需发出传输数据的命令。...
  • 计算机组成原理中Ac和Acc都指的是累加寄存器 这是比较全面的计组知识点:https://www.cnblogs.com/moonsoft/p/9933934.html 以下所有均来自:https://blog.csdn.net/qq_35371031/article/details/82747288 计算机...
  • 这个服务器最大支持8*16=128G的内存,却插了8条4G的(后边7条信息都差不多,没上图),现在想扩展只能换内存条了,当时我的心情就奔溃了。 转载于:https://blog.51cto.com/315805980/1626331
  • JVM内存组成&调优参数详解

    千次阅读 2017-01-07 20:07:35
    内存大小=堆内存区 + 持久代(永久代、方法区)区大小+程序计数器+Java虚拟机栈+本地方法栈; 名词解释: 1、堆内存区:Java程序在运行时创建的所有类实例或数组都放在同一个堆中。而一个Java虚拟实例...
  • jvm虚拟机的五个组成部分解析

    千次阅读 2016-08-22 19:29:59
    几乎不占内存,用于取下一指令 2)堆,所有通过new创建的对象的内存都在堆中分配,堆被划分为新生代和老年代。新生代有进一步划分为 Eden和Survivor区,最后Survivor由FromSpace和ToSpace组成。新建的对象都使用...
  • 组成原理—内存内存与CPU的关系

    万次阅读 多人点赞 2018-03-06 20:49:11
    首先,我们对计算机内存进行简单的了解: 内存(Memory),又称内存储器,是计算机的重要组成部分,计算机的所有程序都需要在内存中运行,内存的性能对计算机的影响非常大。...
  • 消费者通过查看颗粒编号的含义,以识别自己购买内存是否为正品的文章,已经很早就有人开始写了。但随着现代新品颗粒的推出,以及对颗粒编号的调整,早期那些文章已经不能再担任帮助消费者识别真伪的重任。而当今市场...
  • 今天开始谈论一些JVM虚拟机的知识。...首先要讲的也是非常基础的就是JVM的内存组成: JVM的内存被划分5个区域: 堆区、方法区——这两个区域的数据共享 虚拟机栈、本地方法栈、程序计数器——...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 257,688
精华内容 103,075
关键字:

内存条组成部分