精华内容
下载资源
问答
  • 内存条类型说明

    千次阅读 2011-07-30 13:38:15
    1、DDR代表是1代内存、DDR2代表是2代内存、DDR3代表是3代内存。 2、金士顿 512M DDR 400 台式机内存的...常用内存频率266、333、400、533、667、800、1066……等频率。频率越高,速度越快! 3、内存最好要使用同型

     

     1、DDR代表是1代内存、DDR2代表是2代内存、DDR3代表是3代内存。
    2、金士顿 512M DDR 400 台式机内存的“400”是频率的意思!常用内存频率有266、333、400、533、667、800、1066……等频率。频率越高,速度越快!
    3、内存最好要使用同型号、同大小、同频率为好,这样您的系统才能更稳定。

    4、常用内存有DDR、DDR2、DDR3之分,3种内存不能混用,拍前请确定自己电脑使用的是什么型号内存、什么频率。
    5、如果您不确定自己电脑使用什么内存!可以用下面这个“CPU-Z”软件检测一下,谢谢!



    运行软件后看“SPD”选项的“最大带宽”一栏,会看到“PCxx00”,如下:

    DDR 是“1代内存”频率分266 333 400 规格
    PC2100是DDR 266内存
    PC2700是DDR 333内存
    PC3200是DDR 400内存
     
    DDR2 是“2代内存”频率分533 667 800 规格
    PC4200是DDRII533内存
    PC4300是DDRII533内存
    PC5300是DDRII667内存
    PC6400是DDRII800内存

    DDR3是“3代内存”频率分1066 1333 1600 1800 2000 规格
    PC8500是DDRIII1066内存
    PC10600是DDRIII1333内存

     

    在今天的内存市场中主要有三种内存,它们分别是:SDRAM(Synchronous Dynamic RAM),DDR-SDRAM(Double Data Rate SDRAM)以及RDRAM(RAMBUS Dynamic RAM)。这篇文章将详细讨论这三种内存,注意当前市场的主流内存DDR-SDRAM已经又划分出若干版本(如DDR-II或GDDR3),这里只是统一介绍DDR-SDRAM的特点。
    
    SDRAM(同步动态随机存取存储器)
    
      SDRAM是早期内存EDO(Extended Data Output)DRAM内存的改进版本。EDO常见于486或老奔系统上面,其主要缺点在于内存频率和系统频率不一致(不同步),这样将随机出现延迟和等待状态(处理器等待内存传输可用的数据),因此对系统的整体性能影响巨大。SDRAM初始频率为66MHz,这和当时的系统频率相一致。同步的好处显而易见,能够消除不必要的等待时间,尽量保证系统稳定高速的运行。除此之外SDRAM还能够在一个时钟周期之内完成数据存储请求和取回操作,并且能够在下一个时钟周期内准备好数据的传输和接收工作。
    
    DDR-SDRAM(Double Data SDRAM)
    
      在SDRAM规格之后,DDR-SDRAM的出现又是一次技术的进步。随着处理器时钟频率和前端总线频率的飞速提升,处理器在一段时间内能够处理的数据总量变得越来越巨大。例如当前的INTEL和AMD的主力产品Pentium 4和Athlon XP的运算速度已经达到了每秒数十亿次的惊人程度。仅仅从芯片的时钟频率看,处理器的性能已经非常了不起了,但由于有限的内存带宽,系统整体性能仍然受到了局限,因此传统的SDRAM内存已经不能够满足新处理器对数据的需求。
    
    DDR-SDRAM在原有的SDRAM基础上使每一个时钟周期输出的数据变为两倍,相当于达到了同频率的SDRAM的最大理论带宽的两倍,从而极大地提升了原本紧缺的内存带宽。DDR-SDRAM输送和接受的数据都明显要多于SDRAM。这对于当前的Athlon XP和Pentium4来说是最合适的搭配了,为了适应不同总线频率的处理器,DDR-SDRAM也衍生出多种不同速率的内存模块。
    
    DDR-SDRAM采用184针DIMM模块,目前主要有以下几种速率:PC1600(200MHz),PC2100(266MHz),PC2700(333MHz),PC3200(400MHz),PC3500(433MHz),PC3700(466MHz),PC400(500MHz),PC4200(533MHz)和PC4400(566MHz)。名称中的第一个数字,如“PC2100”意为此内存模块的最大带宽,也就是每秒最大能够提供多少MB的数据。后面的MHz是此内存运行时的时钟速率。单根DDR-SDRAM的容量从64MB到2GB不等。
    
    RDRAM(RAMBUS Dynamic RAM)
    
      RDRAM在现在的桌面PC市场上面已经基本绝迹。和DDR-SDRAM不同,RDRAM是一种专利内存标准,由RAMBUS开发研制成功。在1998年RDRAM第一次通过INTEL的鼎力协助进入桌面电脑市场,和高端的Pentium III以及早期的Pentium 4捆绑销售。不过遗憾的是,RAMBUS很快便因为内存技术专利费用的问题卷入了与英飞凌和现代等众多内存生产商的一系列官司纠纷中。
    
      由于RAMBUS对RDRAM技术收取专利费用,导致RDRAM价格昂贵,从而抑制了Pentium 4市场的销售,引发了INTEL的不满。再加上一系列的官司让众多内存生产商联合起来抵制RDRAM,转而生产DDR-SDRAM,让RDRAM失去了占领家庭用户和PC发烧友市场最好的机会。

     

    展开全文
  • String类和常量池内存分析例子以及8基本类型

    千次阅读 多人点赞 2019-01-21 19:52:51
    该篇例子几乎涵盖了目前所有能解决的类型,以一通俗的语言讲解出来。当然如果JVM内存基本问题不太会可以看这里:JVM内存的基本问题 基本问题 String类和常量池内存分析 8基本类型的包装类和常量池 String ...

    该篇例子几乎涵盖了目前所有能解决的类型,以一种通俗的语言讲解出来。当然如果JVM内存基本问题不太会可以看这里:JVM内存的基本问题

    目录

    String类和常量池内存分析

    说说String.intern()

    8种基本类型的包装类和常量池


     

    String类和常量池内存分析

    1 String 对象的两种创建方式

    String str1 = "abcd";

    String str2 = new String("abcd");

    System.out.println(str1==str2); // false

    记住:只要使用 new 方法,便需要创建新的对象。

    2 String 类型的常量池比较特殊。它的主要使用方法有两种:

    • 直接使用双引号声明出来的 String 对象会直接使用或创建常量池中对应的字符串。
    • 如果不是用双引号声明的 String 对象,可以使用 String 提供的 intern 方法。

    说说String.intern()

    String.intern() 是一个 Native 方法,它的作用(在JDK1.6和1.7操作不同)是:

    如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则直接返回常量池中该字符串的引用;

    如果没有, 那么

    在jdk1.6中,将此String对象添加到常量池中,然后返回这个String对象的引用(此时引用的串在常量池)。

    在jdk1.7中,放入一个引用,指向堆中的String对象的地址,返回这个引用地址(此时引用的串在堆)。根据《java虚拟机规范 Java SE 8版》记录,如果某String实例所包含的Unicode码点序列与CONSTANT——String_info结构所给出的序列相同,而之前又曾在该实例上面调用过String.intern方法,那么此次字符串常量获取的结果将是一个指向相同String实例的引用。这是什么意思呢?如果看不懂这个例子没关系,跟着后面从问题一到问题八看一遍你就一定能明白的!!

            String a1 = new String("a"); // 创建"a",并把"a"缓存到常量池,占用2块内存空间
            String a2 = new String("b"); // 创建"b",并把"b"缓存到常量池,占用2块内存空间
            String a3 = new String("c"); // 创建"c",并把"c"缓存到常量池,占用2块内存空间
            System.out.println((a1+a2+a3).intern() == "abc");  // true,在堆中连接生成了"abc",调用intern()后发现常量池没有"abc",那么就把指向堆中的"abc"的引用放入常量池,返回值为这个引用。当执行这个表达式的时候,从左到右执行,左边是常量池指向堆中的引用,右边也是直接使用常量池的"abc"(其实就是指向堆中"abc"的引用),直接返回这个引用,两边引用都是堆里面连接生成的"abc"的地址,所以打印出true。

    Unicode码点序列的直接理解:这玩意不就是字符连起来看equals是否相同不就完了吗!咋这么墨迹~

    关于String的intern()问题,可参考这篇文章Java技术——你真的了解String类的intern()方法吗

    关于运行时常量池:java虚拟机为每个类型都维护着一个常量池。该常量池是java虚拟机中的运行时数据结构,像传统编程语言实现中的符号表一样有很多用途。当类或接口创建时,它的二进制表示中的常量池表被用来构造运行时常量池,运行时常量池中的所有引用最初都是符号引用。

    以下所说常量池为字符串常量池。

    接下来我们均以示例的方式来解释问题,也是我在某篇文章底下解决的别人问题的笔记。

    可能最颠覆你认知的是问题八,所以既然来看了,还是建议看到最后吧!

    问题一:

            String h = new String("cc");
            String intern = h.intern();
            System.out.println(intern == h); // 返回false

    这里为什么不返回true,而是返回false呢?

    解释:

    new String("cc")后,堆中创建了"cc","cc"也会缓存到常量池,可以认为占用了2个字符串对象内存(因为你创建了一个“cc”字符串对象,但是放到了2个地方占用了2块内存)!当你String intern = h.intern();其中h.intern()会去常量池检查是否有了"cc",结果发现有了,那么此时返回常量池的引用地址给intern,用常量池的引用intern和堆中的h引用去比较肯定不相等。所以返回false。

    在JDK中String也是类似于消息池,就是典型的享元模式,一个String被定义后就被缓存到常量池,当其他地方要使用同样的字符串时,就直接使用缓存而不是重复创建。

    问题二:

    我对以下代码的操作过程有疑问

    String str2 = new String("str") + new String("01");
    String str1 = "str01";
    str2.intern();
    System.out.println(str2 == str1); // false

    解释:

           第一句new String("str") + new String("01");现在在堆中创建了"str",同时"str"缓存到常量池,创建了"01",同时"01"也缓存到常量池,再进行连接,堆中出现了"str01"。此时常量池中有:"str","01",此时堆中有"str","01","str01"。str2引用指向堆中的"str01"。
           接着第二句String str1 = "str01"; 发现常量池没有"str01",那么直接在常量池创建"str01"。此时常量池中有:"str","01","str01",此时堆中有"str","01","str01"。str1指向常量池中的"str01"。
           接着第三句str2.intern();检查常量池是否有"str01",结果发现有了,返回常量池"str01"的地址,很可惜,没有变量去接收,所以这一句没什么用,str2指向也不会改变,还是指向堆中"str01"。 
           第四句去打印str2==str1,一个堆中的"str01"地址和一个常量池中的"str01"地址比较,返回false。

    问题三:

    那这一段代码呢?

            String str2 = new String("str") + new String("01");
            String str1 = "str01";
            String str3 = str2.intern();
            System.out.println(str3 == str1); // true

    解释:

    比问题二多了一个str3引用保存了常量池"str01",str3和str1均指向常量池的"str01",所以返回true

    问题四:

            String str2 = new String("str") + new String("01");
            str2.intern();
            String str1 = "str01";
            System.out.println(str2 == str1);
    
            String str3 = new String("str01");
            str3.intern();
            String str4 = "str01";
            System.out.println(str3 == str4);

    这个代码的过程晕乎了,到底这些串在堆还是在常量池呢?

    解释:

           第一句new String("str") + new String("01");现在在堆中创建了"str",同时"str"缓存到常量池,创建了"01",同时"01"缓存到常量池,再进行连接,堆中出现了"str01"。此时常量池中有:"str","01",此时堆中有"str","01","str01"。str2引用指向堆中的"str01"。 
           第二句,str2.intern();检查到常量池不存在"str01",如果在jdk1.6,那么就将堆中的"str01"添加到常量池中,如果是jdk1.7,那么就在常量池保存指向堆中"str01"的地址,即保存堆中"str01"的引用。接下来的讲解以jdk1.7为准!!所以这里是在常量池保存了堆中"str01"的引用。

           第三句,String str1 = "str01";检查到常量池有一个引用保存了这个串,str1就直接指向这个地址,即还是堆中的"str01"。

           第四句,str2==str1是否相等,str2指向堆中的"str01",str1指向常量池的某个地址,这个地址恰好是指向堆中的"str01",所以仍然是true。

           第五句,String str3 = new String("str01");又在堆中创建了"str01",现在堆中有了2个"str01",而常量池已经有"str01"引用,不再缓存进去。(结论是常量池有equals相同的串或者引用指向equals相同的串就不再缓存)

           第六句,str3.intern(); 去检查一下常量池到底有没有"str01"呢?检查发现常量池有个引用指向堆中的"str01",JVM认为常量池是有"str01"的,那么直接返回指向堆中的"str01"地址,很可惜,没有变量去接收,这一句在这里没有什么用。

           第七句,String str4 = "str01";检查到常量池有个引用指向堆中的"str01",那么str4也保存这个引用,所以这个"str01"还是堆中的第一个"str01"。

           第八句,打印str3==str4,str3是堆中新建的第二个"str01",str4保存引用指向第一个堆中的"str01",两块堆的地址,所以返回false。

    问题五:

     String str2 = new String("str") + new String("01");

    为什么不String str2 = new String("str01");呢? 区别在哪里呢?

    解释:

           我们来单独执行比较,前者new String("str")堆中创建"str",同时"str"缓存到常量池,new String("01")在堆中创建"01",同时"01"缓存到常量池,相加操作只会在堆中创建"str01",所以前者执行以后,内存:堆中有"str","01","str01",常量池中"str","01"。str2引用指向堆中的"str01"。
           现在来看后者String str2 = new String("str01");这个就是在堆中创建"str01"同时"str01"缓存到常量池,str2引用指向堆中的"str01",内存:堆中有"str01",常量池中有"str01"。
           综上所述,区别就在于这些串处于不同的位置,前者在常量池是没有"str01"的。

    问题六:

            String s = new String("abc"); 
            String s1 = "abc"; 
            String s2 = new String("abc"); 
            System.out.println(s == s1);// 堆内存"abc"和常量池"abc"相比,false
            System.out.println(s == s2);// 堆内存s和堆内存s2相比,false
            System.out.println(s == s1.intern());// 堆内存"abc"和常量池"abc"相比,false
            System.out.println(s == s2.intern());// 堆内存"abc"和常量池"abc"相比,false
            System.out.println(s1 == s2.intern());// 常量池"abc"和常量池"abc"相比,true
            System.out.println(s.intern() == s2.intern());// 常量池"abc"和常量池"abc"相比,true

    解释:有注释,无需多余解释,上面的问题看懂了这个一看就懂。

    问题七:

            String s1 = "abc"; 
            String s2 = "a"; 
            String s3 = "bc"; 
            String s4 = s2 + s3; 
            System.out.println(s1 == s4);//false,因为s2+s3实际上是使用StringBuilder.append来完成,会生成不同的对象。
            // s1指向常量池"abc",s4指向堆中"abc"(append连接而来)
            String S1 = "abc"; 
            final String S2 = "a"; 
            final String S3 = "bc"; 
            String S4 = S2 + S3; 
            System.out.println(S1 == S4);//true,因为final变量在编译后会直接替换成对应的值
            // 所以实际上等于s4="a"+"bc",而这种情况下,编译器会直接合并为s4="abc",所以最终s1==s4为true。

    问题八:

            String str1 = "abcd"; // 常量池创建"abcd"
            String str2 = "abcd"; // str2还是上一步的"abcd"
            String str3 = "ab" + "cd"; // 常量池创建"ab"和"cd",连接过程编译器直接优化成"abcd",而常量池已经有了"abcd",所以str3和str1都指向"abcd"
            String str4 = "ab"; // 常量池已经有了"ab"
            str4 += "cd"; // str4+"cd"连接的字符串编译器不能优化,所以此时str4指向堆中的"abcd"
            // 因为"ab"是str4引用的,如果是两个变量s1="ab", s2="cd",s1+s2连接,那么只有用final修饰的指向"ab"的s1和final修饰的指向"cd"的s2相连接才能优化成"abcd"
            // 如果只有一个变量s1和常量池的常量连接s1+"cd",这个变量s1也需要final修饰才会优化成"abcd"
            System.out.println(str1 == str2); // true
            System.out.println(str1 == str3); // true
            System.out.println(str1 == str4); // false
            System.out.println("================");
            String s1 = "a";
            String s2 = "b";
            String s3 = "ab";
            final String ss1 = "a";
            final String ss2 = "b";
            System.out.println(s1 + s2 == s3); // false, 有变量引用的字符串是不能优化的,除非变量是final修饰或者直接"a"+"b"的常量形式,这一行就是s1+s2生成堆里的"ab"和常量池的"ab"在比较
            System.out.println(ss1 + ss2 == s3); // true,原因见上一行,原理和下一行相同,都是常量连接
            System.out.println("a" + "b" == s3); // true,常量池的"a"和"b"连接,根据Copy On Write机制, 副本连接生成"ab",发现已存在,直接指向"ab",所以和s3相等
            

    验证一下确实生成了副本才进行连接: 

            String s = "ab";    // 常量池创建"ab"
            String s1 = new String("ab"); // 堆里面创建"ab",因为常量池已有"ab",不会在常量池再缓存一次
            String str3 = "ab" + "cd"; // 连接之后常量池是否还有"ab"??在常量池连接成"abcd"后"ab"和"cd"是否还存在?
            String s2 = s1.intern(); // 如果常量池还有"ab",s2指向常量池"ab",如果没有,则放入s1地址,s2就指向s1,即s2指向堆里的"ab"
            System.out.println(s2 == s1); // 如果true,则s2是堆里的"ab".说明"ab"+"cd"连接后,常量池只有"abcd","ab"和"cd"被回收了
            // 结果运行出来是false,说明"ab"+"cd"连接之后,不仅存在"ab","cd", 还存在"abcd"

           关于Java的String类这种在修改享元对象时,先将原有对象复制一份,然后在新对象上再实施修改操作的机制称为“Copy On Write”,大家可以自行查询相关资料来进一步了解和学习“Copy On Write”机制,在此不作详细说明。

    上面"ab"+"cd"就是"ab"生成"副本ab", "cd"生成"副本cd","副本ab" + "副本cd"被编译器优化成了"abcd",此时优化的副本不再存在,常量池就是"ab", "cd", "abcd"

     

    ("a"+"b"+"c").intern() == "abc"; //true

    "a"+"b"+"c" == "abc"; //true

    看看大家有没有理解?不妨再回到文章开头的例子看看自己能不能分析出来了。

     

    8种基本类型的包装类和常量池

    • Java 基本类型的包装类的大部分都实现了常量池技术,即 Byte、Short、Integer、Long、Character、Boolean;这6种包装类会有相应类型的缓存数据,但是超出此范围仍然会去创建新的对象。Byte、Short、Integer、Long缓存[-128, 127]区间的数据,Character缓存[0, 127]区间的数据,Boolean缓存true和false这两个Boolean对象。
    • 两种浮点数类型的包装类 Float、Double 并没有实现常量池技术。

    首先大家要知道自动装箱直接赋值就可以,比如 Integer a = 20;

    手动装箱有2种方式,一个是调用构造方法Integer a = new Integer(20);另一个是valueOf方法,Integer a = Integer.valueOf(20);

    为什么给大家强调手动装箱?知道调用valueOf,不就可以去看源码在做什么了吗?

    Integer i1 = 33;
    Integer i2 = 33;
    System.out.println(i1 == i2);// 输出true 
    Integer i11 = 333;
    Integer i22 = 333; 
    System.out.println(i11 == i22);// 输出false 
    Double i3 = 1.2; 
    Double i4 = 1.2; 
    System.out.println(i3 == i4);// 输出false
    Double i5 = Double.valueOf(100);
    Double i6 = Double.valueOf(100);
    System.out.println(i5 == i6);// 输出false

    在[-128,127]区间内的利用cache数组的值,否则new一个新的Integer对象。这里2个333不等因为是2块不同的堆内存。2个33相等是因为利用了同一个cache数组,是值的比较,这里i1==33,打印出来也是true。

    Integer 缓存源代码:

        public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high) // Integer里面的high值可以配置,默认127,具体见源码
                return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
        }

    看源码可以知道除了Float、Double,其他基本类型的包装类都有对应的对象常量池缓存(就是cache数组缓存-128~127),Float、Double不管自动还是手动装箱,一定不相等,里面都是调用构造new出来的,比较2块堆内存,请自行查看valueOf源码验证。

        public static Double valueOf(double d) {
            return new Double(d);
        }

    应用场景:

    1. Integer i1=40;Java 在编译的时候会直接将代码封装成 Integer i1=Integer.valueOf(40); 从而使用常量池中的对象。
    2. Integer i1 = new Integer(40) ;这种情况下会创建新的对象。

    Integer i1 = 40; 
    Integer i2 = new Integer(40); 
    System.out.println(i1==i2); //输出false

    Integer 比较(==)更丰富的一个例子:

    Integer i1 = 40;
    Integer i2 = 40;
    Integer i3 = 0;
    Integer i4 = new Integer(40);
    Integer i5 = new Integer(40);
    Integer i6 = new Integer(0);
    System.out.println("i1=i2   " + (i1 == i2));
    System.out.println("i1=i2+i3   " + (i1 == i2 + i3));
    System.out.println("i1=i4   " + (i1 == i4));
    System.out.println("i4=i5   " + (i4 == i5));
    System.out.println("i4=i5+i6   " + (i4 == i5 + i6));
    System.out.println("40=i5+i6   " + (40 == i5 + i6));

    结果:

    i1=i2   true

    i1=i2+i3   true

    i1=i4   false

    i4=i5   false

    i4=i5+i6   true

    40=i5+i6   true

    解释:

    语句 i4 == i5 + i6,因为 + 这个操作符不适用于 Integer 对象,首先 i5 和 i6 进行自动拆箱操作,进行数值相加,即 i4 == 40。然后Integer对象无法与数值进行直接比较,所以i4自动拆箱转为int值40,最终这条语句转为40 == 40进行数值比较。

     

    关注、留言,我们一起学习。 
     

    ===============Talk is cheap, show me the code================

    展开全文
  • 内存屏障的四种类型

    千次阅读 2018-09-05 16:20:20
    Load1 和 Load2 代表两读取指令。在Load2要读取的数据被访问前,保证Load1要读取的数据被读取完毕。   StoreStore屏障: 抽象场景:Store1; StoreStore; Store2 Store1 和 Store2代表两写入指令。在Store...

    LoadLoad屏障

    抽象场景:Load1; LoadLoad; Load2

    Load1 和 Load2 代表两条读取指令。在Load2要读取的数据被访问前,保证Load1要读取的数据被读取完毕。

     

    StoreStore屏障:

    抽象场景:Store1; StoreStore; Store2

    Store1 和 Store2代表两条写入指令。在Store2写入执行前,保证Store1的写入操作对其它处理器可见

     

    LoadStore屏障:

    抽象场景:Load1; LoadStore; Store2

    在Store2被写入前,保证Load1要读取的数据被读取完毕。

     

    StoreLoad屏障:

    抽象场景:Store1; StoreLoad; Load2

    在Load2读取操作执行前,保证Store1的写入对所有处理器可见。StoreLoad屏障的开销是四种屏障中最大的。

    展开全文
  • 我是是台式机,cpui5 3470,主板惠普3396,4个内存卡槽,最大支持32g内存,原来一个低压版ddr3l的4g海力士内存条,然后想加一个内存条,京东买了个标压金百达ddr3 8g内存条装上了,其实这里面几个疑问点: ...

    我是是台式机,cpu i5 3470,主板惠普3396,有4个内存卡槽,最大支持32g内存,原来有一个低压版ddr3l的4g海力士内存条,然后想加一个内存条,京东买了个标压金百达ddr3 8g内存条装上了,其实这里面有几个疑问点:

    1. 台式机基本上都是标压内存条,所以我买了标压的,尽管已有的内存条是低压的,但是能混用,没有任何问题,主板会统一用1.5v供电,低压版内存条是不会烧坏的,最多发热大一点点吧,这个完全放心用。
    2. 查看了我的cpu和主板,仅支持ddr3,所以我就没买ddr4,因为ddr4频率更高(ddr4跟ddr3区别就在于工作频率提高了,频率越高,当然读写内存就越快了),但是用不到,就会降频到ddr3频率使用,所以有点儿浪费ddr4本来应用的性能,但是价格却贵了不少。此外,原来的内存条是ddr3的,那么再买一个内存条也买ddr3的,这样有利于组建内存双通道。
    3. 现在我台式机原有的是低压版4g海力士内存条,新加的是标压版8g金百达内存条,不同电压,不同品牌,不同内存容量的这两个内存条还能组建成内存双通道吗?      答案是“能”,主要是插的时候要插在相同颜色的卡槽里就可以了(我第一次是顺序插在一二卡槽,这两个卡槽一白一黑不同颜色,开机后,cpu-z软件显示单通道,以为内存条型号不一样没法组建双通道,本来准备算了,结果又百度了一下,都说组建双通道得插在一三或者二四这样相同颜色的卡槽了,才可以组建双通道,又插了一遍,还真的可以了(后来又用鲁大师跑分了一下,内存性能并没有什么提升,可能双通道的性能一般也用不到,只有大型3d游戏这种需要频繁内存交换软件才会用到内存双通道的性能),关于不同ddr的混插能不能组建双通道,我没有研究和实验过,这我就不知道了),不需要在BIOS里设置什么,开机就自动组建为双通道了,下图使用CPU-Z软件检测的结果。对了金百达内存条因为很便宜,而且是京东自营的,终身质保,支持一下国产,我也不知道好不好,所以不评论,但是我感觉还不错奥。下图为cpu-z检测图。

    ​​​​​​​

     

     补充知识:双通道内存有什么好处?

    1 首先走出一个误区
    双通道就是双通道,不是什么双通道内存
    而是一种主板和CPU之间的一种内存控制技术。市面上内存都可以用来组成双通道,只要你的主板支持。

    2、双通道的优点
    (1)可以带来2倍的内存带宽,从而可以那些与必须内存数据进行频繁交换的软件得到极大的好处,譬如SPEC Viewperf、3DMAX、IBM Data Explorer、Lightscape等。
    (2)在板载显卡共享内存的时候,双通道技术带来的高内存带宽可以帮助显卡在游戏中获得更为流畅的速度,以3Dmark2001Se为例,其得分成绩的差距,可以拉大到15-40%。
    3、双通道的缺点
    (1)必须构架在支持双通道的主板上,并且必须要有两条相同容量、类型内存条。英特尔的双通道对于内存类型和容量要求很高,两根内存条必须完全一致。而SIS和VIA的双通道主板则允许不同容量和类型的内存共存,只要是两根内存条就行。
    (2)双通道内存控制技术在普通的游戏和应用上,与单通道的差距极小。
    (3)需要购买支持双通道内存控制技术的主板和两根内存条,而这需要更多的成本。
    (4)双通道的接法,对于初手来说十分重要,一旦接法不正确,将无法使双通道起作用。
    (5)双通道内存架构,其超频比较困难,这就影响喜欢DIY超频朋友

    展开全文
  • 如何安装内存条(图文教程)

    万次阅读 2019-04-29 20:32:18
    安装内存条首先要买一条内存条(买之前先看内存条频率和接口类型) 内存频率不一样能一起用吗 许多用户经常会头疼内存频率的问题,其中比较常见的问题除了选择高频还是低频外,就是这个内存频率不一样时是否可...
  • Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

    万次阅读 多人点赞 2018-11-05 09:42:22
    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法    相信一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的...
  • 内存条

    千次阅读 2011-07-25 19:43:59
    内存外观区别很直接:SDR:两个缺口、单面84针脚、双面168针脚DDR1:一个缺口、单面92针脚、双面184针脚、左52右40、内存颗粒长方形DDR2:一个缺口、单面120针脚、双面240针脚、左64右56、内存颗粒正方形、电压1.8...
  • Java 基本数据类型与引用类型 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在...Java中两大类型 内置数据类型(基本数据类型) 引用数据类型   内置数据类型(基本数据类型) Java语...
  •  随着时间的推移,时至今日,新一代Z170、B150主板平台价格已经较为平稳,且较亲民,已经逐渐取代了上一代的Z97与B85主板平台,随之而来的自然也有内存条的新老换岗。  新一代DDR4内存条功耗更低、发热更小、...
  • 联想拯救者Y720增加内存条

    千次阅读 2020-04-25 23:01:13
    2020年4月22日,在已经成功增加一戴尔笔记本的内存条后,现在给自己的笔记本(联想拯救者Y720)增加一条8G内存条,现在根据步骤做个记录。 1,确认电脑可以增加内存条。 第一步,确认插槽数量(插槽不够的话可以...
  • 华硕R414U详细拆机装内存条步骤!

    千次阅读 2019-11-17 21:55:47
    华硕R414U手动拆解安装内存条详细步骤 电脑配置不够用,想要自己...小编拆解的机型是华硕的R414U,这款电脑的自带内存条是集成在主板的,但拆开后发现主板上预留的扩展内存卡槽的;比较麻烦的是不想其它的电脑在后...
  • 随着应用程序的不断增长,...而在服务器领域,目前使用的内存条类型(DIMM)主要有三种:UDIMM、RDIMM和LRDIMM。 UDIMM UDIMM:全称Unbuffered DIMM,即无缓冲双列直插内存模块,指地址和控制信号不经缓冲器,无...
  • UDIMM、LRDIMM、RDIMM三种内存的区别

    千次阅读 2019-06-14 09:19:11
    目前使用的内存条类型(DIMM)主要有三种:UDIMM、RDIMM和LRDIMM。 UDIMM UDIMM:全称Unbuffered DIMM,即无缓冲双列直插内存模块,指地址和控制信号不经缓冲器,无需做任何时序调整,直接到达DIMM上的DRAM芯片。...
  • 凡是对电脑有所了解的朋友都知道内存这玩意,可是,可能不少朋友对内存的认识仅仅局限在SDRAM和DDR SDRAM这两种类型,事实上,内存的种类是非常多的,从能否写入的角度来分,就可以分为RAM(随机存取存储器)和ROM...
  • 块存储和文件存储是我们比较熟悉的两主流的存储类型,而对象存储(Object-based Storage)是一新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称OSD。  首先...
  • 内存条低压标压

    千次阅读 热门讨论 2017-10-15 20:41:17
    【低压标压】  SDRAM 内存一般工作电源是3.3V左右  DDR1代 内存一般工作电源是2.5V左右  DDR2代 内存一般工作电源是...低压版的内存其实也支持1.5V的电压的(低压版内存的模块电压,一是1.35V,一是1.5V
  • 相信一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类...jvm管理的内存大致包括三种不同类型内存区域:Permanent Generation space(永久保存区域)、Heap
  • B部分标明的是该内存模组的生产日期,以个阿拉伯数字的形式表现。第一个阿拉伯数字表示生产的年份,后面两位数字表明是在该年的第XX周生产出来的。如上图中的517表示该模组是在05年的第17周生产的。C部分表示该...
  • ECC RDIMM 服务器内存条简介

    千次阅读 2019-10-27 15:07:11
    举例 Dell / 戴尔 T5820图形工作站 , 8内存卡槽 , 原装DDR4 2666MHz RDIMM ECC Memory 8G*2 ... 目前是一谈到服务器内存,大家都一致强调要买ECC内存,认为ECC内存速度快,其实是一错误地认识,ECC内存成功之...
  • 最开始我是打算,不动光驱位置,在预留的mSTATA接口位置增加一块创见256G的SSD(m.2接口),然后将系统迁移到这个固态硬盘上来,还有就是增加一块金士顿8G的骇客神条内存(DDR3L 1600)。 但是,突然因为后续工作...
  •  三种内存AGP内存,显卡本地内存,系统内存,其中我们都知道显卡本地内存就是显存,系统内存就是咱那内存条,那这AGP内存是个啥玩意啊?其实是因为在以前显卡内存都很小,那时还是在显存是16M,32M为主流的
  • Tomcat内存溢出的原因  在生产环境中tomcat内存设置不好很容易出现内存溢出。...常见的一般会下面三种情况:  1.OutOfMemoryError: Java heap space  2.OutOfMemoryError: PermGen space  3.OutOfMemo
  • Lenovo-Y50p加内存条扩充RAM

    千次阅读 2020-03-02 14:58:49
    一个小伙说他电脑RAM16G,没出啥问题直接编译成功,我看了看我笔记本RAM才4G,看了直接加内存条比较靠谱。 没加内存条之前的RAM(4G) ---------------------------------------------------------...
  • 查看服务器上插了几个内存条,还有几个插槽是空着的 直接上我自己ubuntu测试的结果: 第一部分输出是概要信息,主要说板支持的最大内存是16GB,共有两个内存插槽。 接下了就是两个插槽的信息,由于我只插了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 612,665
精华内容 245,066
关键字:

内存条分为哪三种类型