精华内容
下载资源
问答
  • 内存是什么作用

    千次阅读 2018-06-26 21:32:11
     内存:RAM-随机存储器。 程序的运行需要有一个场所的,因为对于CPU来说,甭管i7或者i8就那么几个寄存器,这一点特别能被忽略,对的,再高级的CPU确实只有那么几个寄存器,CPU的所有动作都直接对寄存器操作的...

        这一问题乍一看会觉得特别简单,但是仔细一想,却很难准确的概括。

        内存:RAM-随机存储器。

        程序的运行是需要有一个场所的,因为对于CPU来说,甭管i7或者i8就那么几个寄存器,这一点特别能被忽略,对的,再高级的CPU确实只有那么几个寄存器,CPU的所有动作都是直接对寄存器操作的,都是要一个一个来的,就相当于总理,总理日理万机,即便要干n多事情,还是在他那个有限的大脑里一件一件的去做,所以为了运行大的和多的程序必然要有个临时的场地,而且还要保证跟CPU能够进行最快的通信,这里的内存就相当于总理的秘书处,存放将要运行的和正在运行的程序变量和各种参数,因为是总理的秘书处,所以跟总理的沟通也是最快的。

        内存和硬盘不同,硬盘是用来存储数据的,不是为了运行程序的。程序运行时,是“秘书处”先把程序代码从硬盘中转移到内存中,然后等到总理(CPU)腾出手来,就从秘书处(内存)进行运行数据,当然了,总理(CPU)的思考过程是要在总理的大脑中(CPU内的计算单元和少量的寄存器)。

        总结,内存就是一个临时存储器,运行程序时,有一个机构会先将程序代码和参数变量存放到内存中,然后CPU来读,接着执行,当然了,当关机后,里面的数据也就没有了。

    展开全文
  • 本篇文章带大家初步了解一下JVM内存模型,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。计算机内存模型在程序运行时,CPU通过访问主存获取数据,但随着CPU的快速发展,CPU访问速度越来越高,...

    本篇文章带大家初步了解一下JVM内存模型,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

    69d6c29d069392505ff5e452bbaca40b.png

    计算机内存模型

    在程序运行时,CPU通过访问主存获取数据,但随着CPU的快速发展,CPU访问速度越来越高,硬件无法满足CPU的条件下,大多内存加入了高速缓存机制,不同CPU都有对应的多级(一般为三)缓存,CPU取数时会先按照一级缓存-二级缓存-三级缓存-主存的顺序进行访问,提高了访问速度,但同时不同的CPU的缓存内的数据可能是不一样的,造成CPU与主存不能实现数据同步

    JAVA内存模型

    JAVA内存模型(Java Memory Model,JMM)是符合计算机内存模型规范的,通过设置内存屏障,屏蔽了不同硬件和操作系统的访问差异的,保证java程序在不同平台都能做到对内存的访问效果一致的机制及规范。

    五大内存区域

    1.程序计数器

    每个线程都有程序计数器,程序计数器用来标识当前线程的程序字节码的行号,java方法运行时,程序计数器保存的是字节码文件的行号,native方法运行时,程序计数器的内容为空,不同的线程拥有其专属的程序计数器,为线程所私有

    2.JAVA虚拟机栈

    每个方法在运行时都会创建一个栈帧,包括存储局部变量表,操作栈,动态链接,方法出口等信息。每一个方法被调用的过程就对应一个栈帧在虚拟机栈中从入栈到出栈的过程。

    JAVA虚拟机栈主要用来存储方法参数,方法内部的局部变量,编译期间加载的数据类型和返回地址类型,为线程所私有

    3.本地方法栈

    与JAVA虚拟机栈作用相似,不同的是后者服务的是虚拟机运行的java方法(字节码),本地方法栈服务的是虚拟机调用的native方法,即底层服务,一般用C或C++编写

    4.堆

    堆是虚拟机加载的最大的一部分内存区域,用来存放对象实例,可以在不连续的内存地址进行存储,只要逻辑地址连续即可。 分为新生代和老年代,新生代与老年代的比例为1:2(可以通过参数 –XX:NewRatio 来指定)

    5.方法区

    又称为永久代,用来存放虚拟机加载的类信息,常量,静态变量,是线程的共享区域,JDK8之后被废弃,改用元空间

    展开全文
  • 什么是内存泄漏?内存泄漏(Memory Leak),指程序在申请内存之后,无法释放已申请的内存空间。内存泄漏会导致内存空间的浪费,大量的内存泄漏会导致程序内存溢出(Out Of Memory)。引起内存泄漏的原因Java虽然有GC...

    什么是内存泄漏?

    内存泄漏(Memory Leak),是指程序在申请内存之后,无法释放已申请的内存空间。内存泄漏会导致内存空间的浪费,大量的内存泄漏会导致程序内存溢出(Out Of Memory)。

    引起内存泄漏的原因

    Java虽然有GC管理内存的回收,但是同样会面临GC无法回收的情况,造成内存泄漏。通常有以下几种产生原因:

    静态集合类引起的内存泄漏

    静态集合在使用时容易出现内存泄漏,由于静态变量的生命周期和应用程序一致,所以程序关闭的时候集合变量占用的空间才会被释放,它们所引用的对象也一直被引用着,无法被GC回收。

    package javauser;

    import java.util.ArrayList;

    import java.util.List;

    public class MemoryLeak {

    static List list = new ArrayList<>();

    public static void main(String[] args) {

    while (true) {

    MemoryUse m = new MemoryUse();

    list.add(m);

    m = null;

    try {

    Thread.sleep(10);

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    }

    }

    }

    class MemoryUse {

    }

    执行GC前,

    83230a9cb95ebf3b7b3bb601e727046f.png

    执行GC后,

    c74b75f1267555d321122a5168797485.png

    可以看出,在执行GC后,javauser.MemoryUse的实例并没有减少,说明GC并没有进行回收。使用list = null,将可以避免这种情况。

    未关闭的流引起的内存泄漏

    在连接数据库池、网络或者读取文件时,没有关闭连接会造成内存泄漏。GC不会主动回收这些连接,所以需要使用close()方法来主动关闭。

    单例模式引起的内存泄漏

    package javauser;

    public class SingleMemoryLeak {

    private M m;

    private static SingleMemoryLeak singleMemoryLeak = new SingleMemoryLeak();

    private SingleMemoryLeak() {}

    public static SingleMemoryLeak getInstance() {

    return singleMemoryLeak;

    }

    public void setM(M m) {

    this.m = m;

    }

    }

    class M {

    public M() {

    SingleMemoryLeak.getInstance().setM(this);

    }

    }

    SingleMemoryLeak实现了单例模式,SingleMemoryLeak持有M实例的引用,这个实例将不能被回收。

    展开全文
  • 说实话mysql的myisam引擎在查询、插入等方面和内存表引擎基本上不相伯仲的,所以第一个建议还是能用myisam的地方还是选择myisam引擎但是最近遇到一个比较麻烦的问题,一个用来存储信息的维表,需要频繁的查询、...

    mysql数据库有着存储引擎的多样性和可扩展性,这样mysql也能拥有多种多样的个性。

    mysql内存表有什么用处?

    说实话mysql的myisam引擎在查询、插入等方面和内存表引擎基本上是不相伯仲的,所以第一个建议还是能用myisam的地方还是选择myisam引擎

    但是最近遇到一个比较麻烦的问题,一个用来存储信息的维表,需要频繁的查询、插入以及较频繁的更新操作,并且这个维表非常的大,先是采用myisam引擎并进行数据的分表,拆分成1000个小表,性能也是不错。但是随着数据量的增加和并发度的增加,由于这些表上都有大量的索引,当插入的并发度比较大的时候,mysql的对于磁盘的使用骤然升高,造成系统对于磁盘io的等待,异常的高。

    由于查询的需求,索引有不能drop掉,所以最开始着手于修改mysql的参数,来提高系统的性能(比如delay insert、batch insert等等),但是效果均不是很理想

    后来考虑到机器的内存尚有结余,最后采用了内存表的方式,解决了这个问题,基本上消除了磁盘io的等待,系统的负载也基本上下降了一倍

    但是这种方式还是有不少问题的:

    内存表一旦mysql重启,将造成数据丢失,还好这个维表对于数据安全性要求不高,可以允许部分数据丢失,补救方式就是每天在系统负载低的时候进行备份

    内存表删除后,内存的释放问题:

    最开始遇到一个很纠结的问题,将建立的这1000个内存引擎小表drop后,系统竟然没有回收内存,先是怀疑mysql存在内存泄露,经过几天对mysql内存引擎源代码的阅读,确定不是内存泄露的问题,后来经过查看linux malloc相关文档,才发现是glibc没有将这些内存交还给系统内核,由于分表后这1000个表都相对较小,gblic的free函数并没有立即将内存sbrk给内核(以备以后的再次malloc),造成这部分内存无法被内核回收。

    这样的话会造成mysql的内存占用异常的高,如果这时候有另外一个程序需要大耗内存的话,可能会有风险。(这块还需要详细测试一下)

    总结:

    对于mysql的用户,如果对数据表的内容安全性要求不高,而对于数据的查询和插入的并发度都很大,并且磁盘io成为瓶颈的话,可以使用内存引擎测试,或许会有不错的效果。

    mysql 内存表基础知识

    mysql 内存表与临时表有哪些区别

    mysql创建内存表方法

    有关MySQL内存表的特性及使用介绍

    mysql 内存表在主从同步时的注意事项

    展开全文
  • 1、计算机首先我们需要讲解下计算机的模型:现代计算机模型基于-冯诺依曼计算机模型我们不用管输入和输出设备,最主要的就是中间计算器和存储器之间的交互,也就是CPU与主内存之间取数、存数。大家会看到有一个IO...
  • java的内存模型是什么意思 有什么作用 如何理解 如何学习 注意哪些
  • 什么是内存对齐以及作用

    千次阅读 多人点赞 2019-05-04 11:15:47
    什么是内存对齐? 为了解释这个问题,先来介绍下面的例子: #include<iostream> using namespace std; struct A { char a; short b; int c; }; struct B { short b; int c; char a; }; int main()...
  • 文章目录知识总览什么是内存,有何作用什么是逻辑地址和相对地址程序从编写到内存的过程程序三种装入内存的方式绝对装入静态重定位动态重定位链接的三种方式 知识总览 什么是内存,有何作用 每一个指令会有一个...
  • JVM内存结构我们都知道,Java代码要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在,而有些...
  • 所有的编程语言中都有内存模型这个概念,区别于微架构的内存模型,高级语言的内存模型包括了编译器和微架构两部分。我试图了解了Java、C#和Go语言的内存模型,发现内容基本大同小异,只是这些语言在具体实现的时候略...
  • 展开全部static作用:1、修饰函数的局部变量:特点:有默认值0,只执行一次,运行一开始62616964757a686964616fe4b893e5b19e31333366303734就开辟了内存内存放在全局2、修饰全局函数和全局变量:特点:只能在本源...
  • 不耻下问:Java语言字符串常量和字符串常量池的作用是什么?可以节约内存么,是什么意思
  • 作用是 : 为了高效的,快速的分配,并且在适当的时候释放和回收内存资源。OC内存管理机制说到OC的内存管理机制 不得不说引用计数什么是引用计数?以下是我查看的比较合理的答案-->引用计数是 : 最普遍的垃圾回收...
  • 各个部分的作用是什么? 1. Java虚拟机内存的五大区域Java的运行离不开Java虚拟机的支持,今天我就跟大家探讨一下Java虚拟机的一些基础知识。JVM内存区域分为...
  • 而我们在选购内存的时候,会看到在一些内存参数中注明支持X.M.P,那么电脑内存XMP是什么意思?有必要开吗?下面装机之家为广大电脑爱好者分享一下关于内存XMP模式的作用与开启教程,来学习一下吧。内存XMP电脑内存...
  • 什么是内存

    2020-11-18 16:34:12
     一、内存作用与分类 内存是电脑中的主要部件,它相对于外存而言的。我们平常使用的程序,如Windows98系统、打字软件、游戏软件等,一般都安装在硬盘等外存上的,但仅此不能使用其功能的,必须把它们调入...
  • Linux课程---12、linux中内存指令(top命令的作用是什么) 一、总结 一句话总结: top实时观察进程、内存和CPU情况 1、电脑出现反应慢情况,最先想到的是什么? 内存 2、linux系统查看cpu和内存消耗的指令...
  • JVM内存区域分为五个部分,分别堆,方法区,虚拟机栈,本地方法栈,程序计数器。 堆。 堆Java对象的存储区域,任何用new字段分配的Java对象实例和数组,都被分配在堆上,Java堆可使用-Xms -Xmx进行内存控制,...
  • Java虚拟机主要分为以下几个区: 方法区 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要对方法区里的常量池和对...虚拟机栈也就是我们平常所称的栈内存,它为java方法.
  • 40 | 理解内存(上):虚拟内存内存保护是什么? 我们在专栏一开始说过,计算机有五大组成部分,分别是:运算器、控制器、存储器、输入设备和输出设备。如果说计算机最重要的组件,是承担了运算器和控制器作用的 ...
  • 1.什么是虚存、实存、共享内存? 虚存 ( VIRT = SWAP交换区 + RES 实际占用实存):进程 "需要的" 虚拟内存大小。包括进程使用库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等。例如:申请10MB,使用1...
  • 电脑里每个硬件都宝,撇去CPU、显卡这类硬件大户,电脑了被提到最多的硬件估计就是内存条了,电脑多开软件卡顿想必大家第一印象就是想换内存条扩容,玩游戏带不动换内存条,内存条真的有这么神奇吗?一条小小的...
  • Linux的内存空间简单可以分为5个部分:  Text(代码区):存放可执行的指令操作,其只读不能写  Bss(静态区or全局区):存放未初始化的全局变量和静态变量  Data(数据区):存放初始化的全局变量和静态变量 ...
  • 什么是闭包(Closure) 简单讲,闭包就是指有权访问另一个函数作用域中的变量的函数。 它由两部分构成:函数,以及创建该函数的环境。环境由闭包创建时在作用域中的任何局部变量组成。 这种官方的概念比较难理解的...
  • 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生 GC,在这里进行的 GC 主要对方法区里的常量池和对类型的卸载2. 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器...
  • 什么是内存

    2013-11-18 16:17:55
    在计算机的组成结构中,有一个很重要的部分,就是...内存在电脑中起着举足轻重的作用内存一般采用半导体存储单元,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。只不过因为RAM其中最重要
  • 在《Oracle内存结构研究-PGA篇》一文中提到,PGA一个服务器进程的专用的私有内存区,而SGA则共享内存区。 SGA由多个部分组成: 1, 固定SGA(Fixed SGA) 2, 块缓冲区(Db cache) 3, 重做日志...
  • 虚拟内存是什么

    2012-01-17 03:42:43
    虚拟内存是什么 2011年07月02日  虚拟内存在Windows XP中非常不起眼的,Windows XP安装时会自动对其进行设置,用户甚至根本不必理会这个文件。但是虚拟内存作为物理内存的补充和延伸,对Windows XP的稳定...
  • 今天爱分享给大家带来JVM 内存分哪几个区,每个区的作用是什么?【面试题详解】,希望能够帮助到大家。java 虚拟机主要分为以下一个区:方法区:1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,113
精华内容 3,645
关键字:

内存作用是什么