精华内容
下载资源
问答
  • 云服务器有什么作用

    千次阅读 2019-09-17 04:14:12
    云服务器有什么作用? 1.Web服务 对于网站空间需求的 中小企业和个人建站来说,租用云服务器是个不错的选择。云服务器即买即用,拥有多种带宽选择,还可使用独立的IP,省钱而又享有独立主机的各种资源,满足中小...

    云服务器有什么作用

    云服务器有什么作用?

    1.Web服务

    对于有网站空间需求的 中小企业和个人建站来说,租用云服务器是个不错的选择。云服务器即买即用,拥有多种带宽选择,还可使用独立的IP,省钱而又享有独立主机的各种资源,满足中小企业网站发展需求。

    2.Email邮件服务器

    云服务器拥有高性能的数据处理能力,不仅能够储存数据,而且还能够快速的处理数据,所以云服务器用来作为Email邮件服务器使用也是一个不错的选择 。

    3.小程序后端

    在小程序的生产环境中,如果需要调用服务器的 REST API 或 Web Socket,服务器必须提供安全的链接地址。也就是说,服务器需要使用SSL加密数据。因此,我们需要在服务器中配置 SSL 加密。

    4.APP后端

    搞软件开发的人都知道,对于一些网络应用软件必须要租用服务器存放才能被更多用户使用。如一些应用于浏览软件、传输软件、远程登录软件等。如果是像以往那样租用物理机服务器,成本费用非常高昂。但是现在有云服务器的选择可以节约了不少成本。

    云服务器其实和虚拟主机的作用差不多,但采用集群式的方式,让使用更加的安全。相比来说,使用起来也方便很多,而且灵活很多,但本质还是一样的。运算能力超强,用户通过电脑等方式接入数据中心,按自己的需求进行运算。提供了便捷的、高效的网络访问。搭配其他云计算资源即可轻松搭建IT架构,满足不同量级需求。

    云服务器的特点:

    1.稳定性和安全性高。云服务器采用分布式存储,支持云镜像,同时存储4份数据,确保数据安全性。   

    2.灵活性好。云服务器升级灵活,配置可以随意调节。   

    3.可靠性高。支持热迁移,支持快速故障迁移。

    4. 自助服务性。支持在线重置服务器密码,支持多服务器内网连接,支持用户自主安装系统。    

    5. 支持负载均衡解决方案。

    使用云服务器作用与好处:

    1、多地域性覆盖

    丰富的地域选择为业务保驾护航:华北、华东、华南三大地域全面覆盖国内业务需求,境外香港、北美、新加坡等地域满足业务出海需求。

    2、稳定可靠

    基于成熟的kvm虚拟化技术;提供99.95%服务可用性;提供配置更高、性能更强的二代 系列 , 以 及 标 准 型 、 高IO型、内存型、计算型等不同机型满足不同需求

    3、高质量网络

    BGP网络支持国内所有主流运营商接入,覆盖全国的极速公网体验;公网入口故障时跨域秒级调度

    4、成本低廉

    提供两种计费方式,满足不同应用场景-包年包月:平均单价较低,适合较长时间需要计算资源的用户;按量计费:适合秒杀大促等突发资源需求,阶梯收费、使时间越长单价越低

    展开全文
  • 内存什么作用

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

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

        内存:RAM-随机存储器。

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

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

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

    展开全文
  • 什么内存对齐以及作用

    千次阅读 多人点赞 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()...

    什么是内存对齐?

    为了解释这个问题,先来介绍下面的例子:

    #include<iostream>
    using namespace std;
    
    struct A
    {
     	char a;
     	short b;
     	int c;
    };
    
    struct B
    {
    	short b;
    	int c;
    	char a;
    };
    
    int main()
    {
     	cout<<sizeof(A)<<endl;
     	cout<<sizeof(B)<<endl;
     	
     	return 0;
     }
    

    运行结果为:
    8
    12

    为什么会这样呢?相同的数据,只是调整了位置,在内存中的大小却不一样?还有按照常理这两个结果体的大小应该都是1+2+4=7才对呀。
    这就是因为有内存对齐,造成的结果。


    内存对齐对于程序员来说透明的,这是编译器该做的事,将每个数据按排到合适的位置,这也是编译器优化的结果。所以了解内存对齐的原理对于一个程序员写代码是十分必要的,就不会导致大量的内存碎片产生。下面就来讲讲内存对齐的规则吧。

    1、对于结构体的第一个成员,将它在整个结构体在内存中分布的偏移量看成0,以后的每一个数据成员的偏移量必须是 min{#pragma pack()指定的数,这个数据成员的本身的数据长度} 的倍数。
    2、每个数据成员完成在结构体内部对齐的时候,还要进行整个结构体在内存中的对齐,整个结构体的大小为 min{#pragma pack()指定的数,这个结构体中数据长度最大的数据成员的长度} 的倍数。

    #pragram pack(n) 表示的是设置n字节对齐,在VC6中默认是8,所以,我们一般都不用考虑这个,除非我们自己自定义内存对齐。

    通过以上的规则,来解释一下之前的两个例子:

    struct A
    {
    	char a;
        short b;
       	int c;
    };
    
    struct B
    {
        short b;
        int c;
       	char a;
    };
    

    对于结构体 A
    a的长度为1字节,偏移量为0;b的长度为2,它的偏移量应该是2的倍数,之前加起来的数据大小总和为1字节,所以a后面要有一字节的空;c的长度为4字节,偏移量应该是4的倍数,之前的数据大小总和为1+1+2=4字节,刚好是4的倍数,在结构体内部的大小总和为8。再进行结构体的对齐,结构体数据长度最大是4,要是4的倍数,8刚好就是4的倍数,所以结果为8。

    对于结构体B
    b的长度为2字节,偏移量为0;c的长度为4,它的偏移量应该是4的倍数,之前加起来的数据大小总和为2字节,所以b后面要有2字节的空位;a的长度为1字节,偏移量应该是1的倍数,之前的数据大小总和为2+2+4=8字节,是1的倍数,在结构体内部的大小总和为9。再进行结构体的对齐,结构体数据长度最大是4,要是4的倍数,但9不是4的倍数,所以结果为12。

    为什么要进行内存对齐?

    一、硬件原因:加快CPU访问的速度
    我们大多数人在没有搞清楚CPU是如何读取数据的时候,基本都会认为CPU是一字节一字节读取的,但实际上它是按照块来读取的,块的大小可以为2,4,8,16。块的大小也称为内存读取粒度。
    假设CPU没有内存对齐,要读取一个4字节的数据到一个寄存器中,(假设读取粒度为4),则会出现两种情况
    1、数据的开始在CPU读取的0字节处,这刚CPU一次就你能够读取完毕
    2、数据的开始没在0字节处,假设在1字节处吧,CPU要先将0~3字节读取出来,在读取4~7字节的内容。然后将0~3字节里的0字节丢弃,将4~7字节里的5,6,7字节的数据丢弃。然后组合1,2,3,4的数据。
    由此可以看出,CPU读取的效率不是很高,可以说比较繁琐。
    但如果有内存对齐的话:
    由于每一个数据都是对齐好的,CPU可以一次就能够将数据读取完成,虽然会有一些内存碎片,但从整个内存的大小来说,都不算什么,可以说是用空间换取时间的做法。
    二、平台原因:
    不是所有的硬件平台都可以访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些类型的数据,否则抛出硬件异常。

    展开全文
  • volatile关键字到底有什么作用

    千次阅读 多人点赞 2020-03-27 09:42:19
    单例模式的双重锁为什么要加volatile [外链图片转存失败,源站可能防盗链机制,建议将图片保存下来直接上传(img-ocKJ6ro3-1585273171038)(…/images/6.png)] 需要volatile关键字的原因是,在并发情况下,如果没有...

    提示:更多优秀博文请移步博主的GitHub仓库:GitHub学习笔记Gitee学习笔记

    volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容易出错。

    1. 并发编程的三个基本概念

    1.1 原子性

    定义: 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。

    原子性是拒绝多线程操作的,不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。简而言之,在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。例如 a=1是原子性操作,但是a++和a +=1就不是原子性操作。

    Java中的原子性操作包括

    • 基本类型的读取和赋值操作,且赋值必须是数字赋值给变量,变量之间的相互赋值不是原子性操作。
    • 所有引用reference的赋值操作
    • java.concurrent.Atomic.* 包中所有类的一切操作

    1.2 可见性

    定义:指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

    在多线程环境下,一个线程对共享变量的操作对其他线程是不可见的。Java提供了volatile来保证可见性,当一个变量被volatile修饰后,表示着线程本地内存无效,当一个线程修改共享变量后他会立即被更新到主内存中,其他线程读取共享变量时,会直接从主内存中读取。当然,synchronize和Lock都可以保证可见性。synchronized和Lock能保证同一时刻只有一个线程获取锁然后执行同步代码,并且在释放锁之前会将对变量的修改刷新到主存当中。因此可以保证可见性。

    1.3 有序性

    定义:即程序执行的顺序按照代码的先后顺序执行。

    Java内存模型中的有序性可以总结为:如果在本线程内观察,所有操作都是有序的;如果在一个线程中观察另一个线程,所有操作都是无序的。前半句是指“线程内表现为串行语义”,后半句是指“指令重排序”现象和“工作内存主主内存同步延迟”现象。

    在Java内存模型中,为了效率是允许编译器和处理器对指令进行重排序,当然重排序不会影响单线程的运行结果,但是对多线程会有影响。Java提供volatile来保证一定的有序性。最著名的例子就是单例模式里面的DCL(双重检查锁)。另外,可以通过synchronized和Lock来保证有序性,synchronized和Lock保证每个时刻是有一个线程执行同步代码,相当于是让线程顺序执行同步代码,自然就保证了有序性。

    2. Java内存模型以及共享变量的可见性

    JMM决定一个线程对共享变量的写入何时对另一个线程可见,JMM定义了线程和主内存之间的抽象关系:共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory,有些文章将其称为工作内存),本地内存保存了被该线程使用到的主内存的副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。

    在这里插入图片描述
    对于普通的共享变量来讲,线程A将其修改为某个值发生在线程A的本地内存中,此时还未同步到主内存中去;而线程B已经缓存了该变量的旧值,所以就导致了共享变量值的不一致。解决这种共享变量在多线程模型中的不可见性问题,较粗暴的方式自然就是加锁,但是此处使用synchronized或者Lock这些方式太重量级了,比较合理的方式其实就是volatile。

    需要注意的是,JMM是个抽象的内存模型,所以所谓的本地内存,主内存都是抽象概念,并不一定就真实的对应cpu缓存和物理内存

    3. 锁的互斥与可见性

    锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。

    1. 互斥即一次只允许一个线程持有某个特定的锁,一次就只有一个线程能够使用该共享数据。
    2. 可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的。也即当一条线程修改了共享变量的值,新值对于其他线程来说是可以立即得知的。如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前的值或不一致的值,这将引发许多严重问题。

    4. volatile变量的特性

    4.1 保证可见性,不保证原子性

    • 可见性:当某个线程修改volatile变量时,JMM会强制将这个修改更新到主内存中,并且让其他线程工作内存中存储的副本失效。
    • volatile变量并不能保证其操作的原子性,具体来说像i++这种操作并不是原子操作,使用volatile修饰变量后仍然不能保证这一点。具体体现我们看下面的代码:
    public class Test {
        private static volatile int count = 0;
    
        public static void main(String[] args){
            Thread[] threads = new Thread[5];
            for(int i = 0; i<5; i++){
                threads[i] = new Thread(()->{
                    try{
                        for(int j = 0; j<10; j++){
                            System.out.println(++count);
                            Thread.sleep(500);
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                });
                threads[i].start();
            }
        }
    }
    

    生成5条线程,每条线程都对count执行10次自增操作,我们预期结果是1-50均匀的打印出来,但不管运行多少次,都无法得到期望的结果:
    在这里插入图片描述
    这说明仅仅保证数据的可见性并不能保证线程安全,具体原因我们来分析一下:

    首先我们需要明确的是,count++操作并不是原子操作,因为自增操作包括三个基本指令:读取数据、计算数据、返回结果,可以看看i++相关的字节码:

    Code:
           0: getstatic	//读取原数据
           3: iconst_1	//定义常量1
           4: iadd	//计算数据
           5: putstatic  //输出结果                 // Field count:I
           8: return
    

    现象一:数据没有按顺序输出

    假如线程A获取执行权,并在“返回结果”后停止(未打印),而转为线程B执行操作,巧合的是线程B这三步操作在一个时间片中完成:读取数据、计算数据、返回结果、打印数据,然后时间片转回线程A,线程打印刚刚计算的数据,此时就会发生先打印的数据比后打印的数据大的问题。

    现象二:数据输出重复

    假如线程A获取执行权,并在“读取数据”后停止;线程B开始执行,由于线程A还没有进行数据计算和数据返回操作,也就是说主内存中的数据并没有更新,而此时B线程完成自增操作,并且输出结果。转回线程A,由于它已经完成了数据读取工作,它将继续往下执行,但是它现在读取的数据已经是一个过期数据了,最终输出结果会和B线程输出的一样。

    所以保证数据可见性并不能保证线程安全,事实上就是保证操作是原子性操作,才能保证使用volatile关键字的程序在并发时能够正确执行。而锁机制刚好能保证操作的原子性和可见性。而锁机制之所以能保证原子性,是因为锁有互斥性,并且对于一个已经竞争到同步锁的线程,在还没有走出同步块的时候,即使时间片结束也不会释放锁。

    实事求是的说,笔者在此使用字节码来分析问题,仍然不够严谨,因为即使编译出来的字节码只有一条指令,也并不意味着执行是一个原子操作。一条字节码指令在解释执行时,解释器将要运行多行代码才能实现它的语义。但是在这里通过字节码就能够说明自增操作不是原子操作,所以此处用字节码进行分析。

    4.2 禁止指令重排

    指令重排是指JVM在编译Java代码的时候,或者CPU在执行JVM字节码的时候,对现有的指令顺序进行重新排序

    指令重排的目的是为了在不改变程序执行结果的前提下,优化程序的运行效率。需要注意的是,这里所说的不改变执行结果,指的是不改变单线程下的程序执行结果。

    重排序操作不会对存在数据依赖关系的操作进行重排序。比如:a=1;b=a; 这个指令序列,由于第二个操作依赖于第一个操作,所以在编译时和处理器运时这两个操作不会被重排序。

    重排序是为了优化性能,但是不管怎么重排序,单线程下程序的执行结果不能被改变。比如:a=1;b=2;c=a+b这三个操作,第一步(a=1)和第二步(b=2)由于不存在数据依赖关系, 所以可能会发生重排序,但是c=a+b这个操作是不会被重排序的,因为需要保证最终的结果一定是c=a+b=3。

    然而,指令重排是一把双刃剑,重排序在单线程下一定能保证结果的正确性,但是在多线程环境下,可能发生重排序,影响结果,下例中的1和2由于不存在数据依赖关系,则有可能会被重排序,先执行status=true再执行a=2。而此时线程B会顺利到达4处,而线程A中a=2这个操作还未被执行,所以b=a+1的结果也有可能依然等于2。

    public class TestVolatile {
        int a = 1;
        boolean status = false;
    
        /**
         * 状态切换为true
         */
        public void changeStatus() {
            a = 2;
            status = true;
        }
    
        /**
         * 若状态为true,则running
         */
        public void run() {
            if (status) {
                int b = a + 1;
                System.out.println(b);
            }
        }
    }
    

    使用volatile关键字修饰共享变量便可以禁止这种重排序。若用volatile修饰共享变量,在编译时,会在指令序列中插入内存屏障来禁止特定类型的处理器重排序,volatile禁止指令重排序也有一些规则:

    1. 当程序执行到volatile变量的读操作或者写操作时,在其前面的操作的更改肯定全部已经进行,且结果已经对后面的操作可见;在其后面的操作肯定还没有进行;
    2. 在进行指令优化时,不能将在对volatile变量访问的语句放在其后面执行,也不能把volatile变量后面的语句放到其前面执行。

    通俗的说就是执行到volatile变量时,其前面的所有语句都执行完,后面所有语句都未执行。且前面语句的结果对volatile变量及其后面语句可见

    5. volatile的原理

    volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。观察加入volatile关键字和没有加入volatile关键字时所生成的汇编代码发现,加入volatile关键字时,会多出一个lock前缀指令,lock前缀指令实际上相当于一个内存屏障(也成内存栅栏),内存屏障会提供3个功能:

    1. 它确保指令重排序时不会把其后面的指令排到内存屏障之前的位置,也不会把前面的指令排到内存屏障的后面;即在执行到内存屏障这句指令时,在它前面的操作已经全部完成;
    2. 它会强制将对缓存的修改操作立即写入主存;
    3. 如果是写操作,它会导致其他CPU中对应的缓存行无效。

    6. 单例模式的双重锁为什么要加volatile

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ocKJ6ro3-1585273171038)(…/images/6.png)]

    需要volatile关键字的原因是,在并发情况下,如果没有volatile关键字,在第5行会出现问题。instance = new TestInstance();可以分解为3行伪代码:

    • memory = allocate() //分配内存
    • ctorInstanc(memory) //初始化对象
    • instance = memory //设置instance指向刚分配的地址

    上面的代码在编译运行时,可能会出现重排序从a-b-c排序为a-c-b。在多线程的情况下会出现以下问题。当线程A在执行第5行代码时,B线程进来执行到第2行代码。假设此时A执行的过程中发生了指令重排序,即先执行了a和c,没有执行b。那么由于A线程执行了c导致instance指向了一段地址,所以B线程判断instance不为null,会直接跳到第6行并返回一个未初始化的对象。(synchronized并不能禁止指令重排和处理器优化)

    拓展:双锁校验的优势在于在大多数情况下,不需要进入synchronized的代码块中,大大加快了程序的执行效率,而如果在第一次执行getInstance()方法时,也能保证对象创建的安全性。

    参考文章

    • https://blog.csdn.net/u012723673/article/details/80682208

    • https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653192450&idx=2&sn=ad95717051c0c4af83923b736a5bc637&chksm=8c99f3d8bbee7aceb123e4f6aa9a220630b5aa17743ba812d82308bfb6a8ed8303bdd181f144&mpshare=1&scene=23&srcid=0929Elncx0R0l02WWFrc9Cpt&sharer_sharetime=1569734533458&sharer_shareid=e81601a95b901aeca142bbe3b957819a#rd

    展开全文
  • 面试|static 关键字有什么作用

    万次阅读 多人点赞 2019-06-16 12:43:01
    今天主要学习下Java语言中的static关键字。 static关键字的含义及使用场景 ...(注意:不能修饰普通类,除了内部类,这是为什么?) class A { static { System.out.println("A : 静态代码块"); ...
  • final 在 java 中有什么作用

    千次阅读 2020-07-19 07:50:20
    final作为Java中的关键字可以用于三个地方。... 但是这里的"不能够被改变"对于不同的数据类型是不同的含义的. 当final修饰的是一个基本数据类型数据时, 这个数据的值在初始化后将不能被改变; 当final修饰的是一个引
  • Java虚拟机主要分为以下几个区: 方法区 时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对...虚拟机栈也就是我们平常所称的栈内存,它为java方法.
  • 什么是winpe,winpe系统有什么作用

    千次阅读 2018-12-20 15:20:55
    本文章针对计算机知识相对薄弱,重装系统经验比较缺乏的朋友,本人对于计算机...大部分朋友少不免都找过外面的师傅修电脑,而维修电脑经历最多的莫过于重装系统,因为重装系统确实能解决很多问题。不少朋友在师傅...
  • 面试——final 在 java 中有什么作用

    万次阅读 多人点赞 2019-09-17 22:16:33
    final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。 特征:凡是引用final关键字的地方皆不可修改! (1)修饰类:表示该类不能被继承... 但是这里的"不能够被改变"对于不同的数据类型是不同...
  • (五十一)volatile有什么作用

    千次阅读 2019-03-19 15:45:16
    一、volatile作用 ①保证内存可见性 通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。 当一个变量被volatile修饰时,任何线程对它的写操作...
  • c++内存作用和优势

    千次阅读 2016-08-20 11:31:53
    而直接使用系统调用malloc/free、new/delete进行内存分配和释放,以下弊端:  1.调用malloc/new,系统需要根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存,调用free/delete,系统可能...
  • 内存管理的概念及作用

    千次阅读 2018-05-25 13:34:26
    操作系统对内存的划分和动态分配,就是内存管理的概念。有效的内存管理在多道程序设计中非常重要,不仅方便用户使用存储器、提高内存利用率,还可以通过虚拟技术从逻辑上扩充存储器。内存管理的功能:1.内存空间的...
  • 什么是静态,静态有什么作用呢?

    千次阅读 2020-08-09 23:15:00
    设置一个类,这个类很多对象,很多对象的其中一个属性,属性值是一样的,此时每个对象都内存空间去存储属 性值 坏处: 1)空间浪费 2)如果想要将这个属性值进行修改,需要将所有对象的属性值都...
  • JVM内存区域划分及其作用

    千次阅读 2018-06-21 21:34:26
    方法,这个方法的作用就是:先从方法区的运行时常量池中查找看是否该值,如果,则返回该值的引用,如果没有,那么就会将该值加入运行时常量池中。 二、练习画内存图 平常分析中用到的最多还是堆、虚拟机栈和方法...
  • 什么内存泄漏?有什么危害

    千次阅读 多人点赞 2019-04-18 11:31:56
    1、什么内存泄漏 内存泄漏是指你向系统申请分配内存进行使用(new/malloc),然后系统在堆内存中给这个对象申请一块内存空间,但当我们使用完了却没有归系统(delete),导致这个不使用的对象一直占据内存单元,...
  • 内存和缓存之间有什么区别?

    万次阅读 2012-03-04 18:53:48
    实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。 内存则是作为CPU与硬盘间的存储
  • 1.什么是vue生命周期?有什么作用

    万次阅读 2019-02-23 20:54:27
    有什么作用? 每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做 生命周期钩子 的函数,这...
  • class.forName()方法有什么作用

    千次阅读 2018-06-20 09:22:49
    1.jvm会查找指定路径类的class文件,然后将class文件读入内存,为该类生成一个class对象作为访问类型信息的入口(类型信息是该类的class文件转换成的数据结构,存储在方法区,class对象就是用于访问这个数据结构的,...
  • 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。...1、单例类只能一个实例。 2、单例类必须自己创建自己的唯一...
  • 寄存器是什么 有什么作用

    千次阅读 2016-11-16 10:32:41
    转载于:... 寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。 ...2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。 3.可以用来读写数据到电脑的周
  • 目标:掌握Fsimage和Edits的作用。 NameNode元数据解析 (1)第一次启动namenode格式化后,创建fsimage和edits文件。如果不是第一次启动,直接加载edits和fsimage文件到内存。 (2)客户端对元数据进行增删改的...
  • 服务器的内存和普通的内存有什么不一样 一、首先在选购上来说 普通的内存比如PC内存等等,大家通常都是在看内存条是DDR3还是DDR4,频率是多少,2133还是3000,用的是什么颗粒?内存时序是多少?4G内存条多少钱,8G...
  • java内存模型

    千次阅读 多人点赞 2018-11-09 13:09:55
    java内存模型 下图就是java内存模型,但是一般讨论的时候不会画这个图,一般画的是java内存模型抽象结构图(在下文)。Thread Stack就是java内存模型抽象结构图中的本地内存,Heap就是java内存模型抽象结构图中的主...
  • 二>jvm到底是什么有什么作用?工作机制如何?

    万次阅读 多人点赞 2018-05-04 11:24:23
    JVM自己完善的硬件结构,例如处理器、堆栈和寄存器等,还具有相应的指令系统。 2、jvm作用 JVM是java字节码执行的引擎,还能优化java字节码,使之转化成效率更高的机器指令。 JVM中类的装载是由类加载器和它的子类...
  • Linux中inode节点有什么作用

    千次阅读 2017-07-25 16:30:44
    Linux文件系统中的... Linux中inode节点有什么作用? 一、inode是什么? 理解inode,要从文件储存说起。  文件储存在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
  • 什么情况下变量需要标记volatile? 线程间共享变量需要使用volatile关键字标记,确保每个线程都能读取到更新后的变量值。 为什么要对线程间共享的变量用关键字volatile声明? 这涉及到Java的内存模型。在Java虚拟机...
  • 1.什么是Nginx? Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。 Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。由俄罗斯的...
  • 1系列化是干什么的?  序列化简单来说就保存对象在内存中的状态也可以说是实例化变量。这是Java提供的用来保存 Object state,一种保存对象状态的机制。只有实现了serializable接口的类的对象才能被实例化。 2...
  • 什么要进行结构体内存对齐

    千次阅读 多人点赞 2018-08-10 21:59:12
    什么是结构体内存对齐 结构体不像数组,结构体中可以存放不同类型的数据,它的大小也不是简单的各个数据成员大小之和,限于读取内存的要求,而是每个成员在内存中的存储都要按照一定偏移量来存储,根据类型的不同,...
  • 内存中不用的对象是由JVM自动回收的,具体是由gc对内存进行管理和清扫,并对内存中的对象进行标记,通过标记判断是否需要清理,通过自动不间断的清理能够使得JVM免于内存溢出的问题 以上的回答当然很简略,如果要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,339,077
精华内容 535,630
关键字:

储存有什么作用