精华内容
下载资源
问答
  • JAVA运行机制 千次阅读
    2021-02-25 19:23:40

    这一篇我们来简单理解一下JAVA的运行机制

    大概可以分为三大部分

    1.编写程序

    2.编译程序

    3.运行程序

    1.编写程序

    编写程序就是我们前面说的源代码

    这些源代码都有特殊的语法

    例如main函数

    他是jdk中一个比较特殊的函数

    他必须要使用特定的语法来编写

    (在前面加上 public  等关键字来修饰)

    源代码就像是程序的灵魂,

    程序的实现是由源代码来就决定的

    就像一块橡皮泥,

    你想把它变成什么样子完成由你来决定

    2.编译程序

    为什么要编译?

    因为 JAVA和大多数语言一样是一种高级语言

    我们编写好的代码都被保存成为一个.java的文件

    然而我们计算机并不认识(不能运行)这些文件

    这就需要把我们编写好的文件(源代码)变成计算机可以运行的机器码(二进制码)

    这个过程就叫做编译

    注意:编译就是我们前面用到的 javac 命令

    它可以将.java文件编译成一个.class文件(字节码)

    并且class文件是一种与平台无关的文件

    3.运行程序

    上面说到把源代码编译成字节码。

    那么就到运行字节码了

    其实我们的JAVA语言有一个非常大的特点就是跨平台

    用他们话说就是:一次编译,到处运行

    前面说过class文件是一种与平台无关的文件

    它也不可直接运行

    那我们怎么运行呢?

    这就要讲到一个东西jvm(JAVA虚拟机)

    它可以将我们的class文件解释成计算机可以运行的二进制

    那我们的jvm是如何运行的呢

    我们都知道所有程序只有在内存中才能运行

    所以我们在运行JAVA文件的时候(java命令)

    首先会在内存中创建一个jvm

    然后把硬盘里的class文件加载进来

    利用jvm去解释这些class文件

    最后运行程序。

    PS:为什么说JAVA跨平台

    1.因为编译后的class文件只能被jvm所解释

    2.任何平台只要有jvm(JAVA运行环境)就可以解释这个class文件

    3.无论什么平台解释同一个class文件最后的结果都是一样的

    也就是说我用Windows系统编译好的class文件,拿来Android(前提要有环境)上运行也是一样的

    更多相关内容
  • 华为历史发展和企业运行机制分析.docx华为历史发展和企业运行机制分析.docx华为历史发展和企业运行机制分析.docx华为历史发展和企业运行机制分析.docx华为历史发展和企业运行机制分析.docx华为历史发展和企业运行...
  • Spring Boot运行机制

    千次阅读 2020-05-31 13:47:51
    这个问题通常会被问到,之前丁甲也只是背书应付面试,但这样始终是好的,于是我决定看看Spring Boot注解的源码,并从源码层面上来看看Spring Boot的运行机制究竟是什么。 首先,我们随便打开一个Spring Boot项目...

            大家好,我是丁甲,很久没有写博客了,最近由于工作原因,需要重新面试,所以最近会写几篇关于面试的博客。

    Spring Boot的运行机制是什么?

            这个问题通常会被问到,之前丁甲也只是背书应付面试,但这样始终是好的,于是我决定看看Spring  Boot注解的源码,并从源码层面上来看看Spring Boot的运行机制究竟是什么。

            首先,我们随便打开一个Spring Boot项目,我们能够发现他的启动类是都是有一个非常重要的注解:  

    @SpringBootApplication
    public class Demo123Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Demo123Application.class, args);
        }
    
    }

            这个非常重要的注解就是@SpringBootApplicaiton。

       

            其次,任意打开一个SpringBoot项目,不难发现他的启动类(使用@SpringBootApplication注解的类)目录层级非常高,是顶级目录,这是为什么呢?今天我们从源码的角度出发,进一步的解析SpringBoot项目的运行机制。

     

    @SpringBootApplication注解是一个复合注解

            @SpringBootApplication是一个复合注解,并非一个单一的注解,我们点开一个@SpringBootApplication就不难发现:

      

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(
        excludeFilters = {@Filter(
        type = FilterType.CUSTOM,
        classes = {TypeExcludeFilter.class}
    ), @Filter(
        type = FilterType.CUSTOM,
        classes = {AutoConfigurationExcludeFilter.class}
    )}
    )
    public @interface SpringBootApplication {
        @AliasFor(
            annotation = EnableAutoConfiguration.class
        )
        Class<?>[] exclude() default {};
    
        @AliasFor(
            annotation = EnableAutoConfiguration.class
        )
        String[] excludeName() default {};
    
        @AliasFor(
            annotation = ComponentScan.class,
            attribute = "basePackages"
        )
        String[] scanBasePackages() default {};
    
        @AliasFor(
            annotation = ComponentScan.class,
            attribute = "basePackageClasses"
        )
        Class<?>[] scanBasePackageClasses() default {};
    
        @AliasFor(
            annotation = ComponentScan.class,
            attribute = "nameGenerator"
        )
        Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
    
        @AliasFor(
            annotation = Configuration.class
        )
        boolean proxyBeanMethods() default true;
    }

            从这段源码中不难看出,@SpringBootApplication注解是由多个注解组合而成的,而在这几个组合注解中其中最重要的核心注解当属@EnableAutoConfiguration、@ComponentScan、@Configuration。

            我们从这三个核心注解来分下SpringBoot项目的运行机制。

     

    @Configuration注解

            源码:

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Component
    public @interface Configuration {
        @AliasFor(
            annotation = Component.class
        )
        String value() default "";
    
        boolean proxyBeanMethods() default true;
    }
    

            @coofiguration注解是一个十分常用的注解,经常都会用到。它的作用通过java类将写好的类在Spring容器初始化的时候将其加载到Spring容器中去,摒弃了xml配置文件来初始化Bean,十分的方便,和他一起使用的注解为@Bean

     

    @ComponentScan

            源码:

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.TYPE})
    @Documented
    @Repeatable(ComponentScans.class)
    public @interface ComponentScan {
        @AliasFor("basePackages")
        String[] value() default {};
    
        @AliasFor("value")
        String[] basePackages() default {};
    
        Class<?>[] basePackageClasses() default {};
    
        Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
    
        Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;
    
        ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;
    
        String resourcePattern() default "**/*.class";
    
        boolean useDefaultFilters() default true;
    
        ComponentScan.Filter[] includeFilters() default {};
    
        ComponentScan.Filter[] excludeFilters() default {};
    
        boolean lazyInit() default false;
    
        @Retention(RetentionPolicy.RUNTIME)
        @Target({})
        public @interface Filter {
            FilterType type() default FilterType.ANNOTATION;
    
            @AliasFor("classes")
            Class<?>[] value() default {};
    
            @AliasFor("value")
            Class<?>[] classes() default {};
    
            String[] pattern() default {};
        }
    }
    

            @componentScan注解,是一个扫描包的注解。在Spring容器初始化的时候,invokeBeanFactoryPostProcessor()方法中会将所有的@componentScan下面的包扫描并将类通过一系列的操作(java  -> class ->BeanDefinitonMap ->Singleton)加载入Spring容器中

     

    @EnableAutoConfiguration

            源码:

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @AutoConfigurationPackage
    @Import({AutoConfigurationImportSelector.class})
    public @interface EnableAutoConfiguration {
        String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
    
        Class<?>[] exclude() default {};
    
        String[] excludeName() default {};
    }

            @EnableAotuConfiguration类中的核心注解为@import以及AutoConfigurationImportSelector类。@Import注解也是我们平时用得非常多的一个注解,同一模块下的引包,以及JDK自带包的引用都是需要用@Import注解使用的,这个注解是非常好理解的,然后我们再来说一说@Import的AutoConfigurationimportSelector类。

            首先我们来看看autoSonfigurationImportSelector类的源码:

    public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware, ResourceLoaderAware, BeanFactoryAware, EnvironmentAware, Ordered {
        private static final AutoConfigurationImportSelector.AutoConfigurationEntry EMPTY_ENTRY = new AutoConfigurationImportSelector.AutoConfigurationEntry();
        private static final String[] NO_IMPORTS = new String[0];
        private static final Log logger = LogFactory.getLog(AutoConfigurationImportSelector.class);
        private static final String PROPERTY_NAME_AUTOCONFIGURE_EXCLUDE = "spring.autoconfigure.exclude";
        private ConfigurableListableBeanFactory beanFactory;
        private Environment environment;
        private ClassLoader beanClassLoader;
        private ResourceLoader resourceLoader;
        private AutoConfigurationImportSelector.ConfigurationClassFilter configurationClassFilter;
    
        public AutoConfigurationImportSelector() {
        }
    

            首先这个类是实现了DeferredImportSelector接口,然后在看来他的核心方法 :

    protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }
    

            他的核心方法就是这个SpringFactoriesLoader.loadFactoryNames(),作用就是将META-INF/spring.factories的文件信息读取出来。然后作为Bean加载到Spring容器中。

     

    总结:

            1、SpringBoot的运行机制要从他的核心注解@SpringBootAppliccation说起

            2、@SpringBootApplication的核心注解为:@ComponentScan、@Configuration、@EnabledAutoConfiguration

            3、@ComponentScan发现扫描包并将包下面的类加载进Spring容器作为Spring Bean 

            4、@Configuration + @Bean将自定义的配置类也加载入Spring容器中作为SpringBean

            5、@EnabledAutoConfiguration、@Import(AutoConfigurationIpmortSelector)、@AutoConfigurationPackage三个注解将Spring容器里面的Bean实现发现与加载

     

     

    展开全文
  • 华为历史发展和企业运行机制分析.pdf华为历史发展和企业运行机制分析.pdf华为历史发展和企业运行机制分析.pdf华为历史发展和企业运行机制分析.pdf华为历史发展和企业运行机制分析.pdf华为历史发展和企业运行机制分析...
  • Java程序的运行机制

    千次阅读 2021-07-25 19:58:36
    简单来说Java程序的运行机制分为编写、编译和运行三个步骤。 1.编写 编写是指在Java开发环境中进行程序代码的编辑,最终生成后缀名为“.java”的Java源文件。 2.编译 编译是指使用Java编译器对源文件进行错误排查的...

    简单来说Java程序的运行机制分为编写、编译和运行三个步骤。

    1.编写

    编写是指在Java开发环境中进行程序代码的编辑,最终生成后缀名为“.java”的Java源文件。

    2.编译

    编译是指使用Java编译器对源文件进行错误排查的过程,编译后将生成后缀名为.class的字节码文件,该文件可以被Java虚拟机(JVM)的解释器正常读取。

    3.运行

    运行是指使用Java解释器将字节码文件翻译成机器代码,执行并显示结果。字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码,它是一种二进制文件,是Java源文件由Java编译器编译后生成的目标代码文件。编程人员和计算机都无法直接读懂字节码文件,它必须由专用的Java解释器来解释执行,因此Java是一种在编译基础上进行解释运行的语言。

    在运行Java程序时,首先会启动JVM,然后由它来负责解释执行Java的字节码,并且Java字节码只能运行于JVM之上。这样利用JVM就可以把Java字节码程序和具体的硬件平台以及操作系统环境分隔开来,只要在不同的计算机上安装了针对于特定具体平台的JVM,Java程序就可以运行,而不用考虑当前具体的硬件平台及操作系统环境,也不用考虑字节码文件是在何种平台上生成的。JVM把这种不同软硬件平台的具体差别隐藏起来,从而实现了真正的二进制代码级的跨平台移植。JVM是Java平台无关的基础,Java的跨平台特性正是通过在JVM中运行Java程序实现的。接下来了解一下Java的运行流程,如图所示。

    img

    Java运行流程

    图中,从编写出来的Java源文件,到编译为字节码文件,再到通过JVM执行程序,然后将程序的运行结果展示给用户,这是一个完整的Java运行流程。

    展开全文
  • HBase实现原理及运行机制

    千次阅读 2022-03-07 09:55:51
    HBase原理

    1.功能组件

    1.1 功能组件

     (1)库函数一般用于链接每个客户端,让客户端能利用库函数访问HBase的数据;

    (2)Master服务器主要充当管家的作用。

            通过Master服务器,可以实现对HBase表中的分区信息进行维护和管理;同时它还维护了一个Region服务器列表,通过Master服务器知道整个集群中有哪些Region服务器在工作,哪些Region服务器发生故障;同时它还负责对Region进行分配,也即一个表进行分区,分成多个Region,每个Region要被分配到哪个Region服务器都由Master决定;

    展开全文
  • ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的
  • js运行机制

    千次阅读 多人点赞 2019-02-25 22:49:24
    第一步:运行主体script代码,从头到尾运行,所以先输出script start,遇到了属于宏任务的setTimeout,将它放入Event Queue;紧接着遇到了属于微任务的Promise,也放入Event Queue(与setTimeout不是同一个),执行...
  • 简述Java运行机制

    千次阅读 2020-06-28 23:44:49
  • 《操作系统》-操作系统的运行机制

    千次阅读 2022-01-18 13:15:39
    操作系统的运行机制 程序是如何运行的 指令:就是处理器(CPU)能识别、执行的最基本命令 注:很多人习惯把 Linux、Windows、MacOS 的“小黑框”中使用的命令也称为“指令”,其实这是“交互式命令接口”,注意与本...
  • java程序的JVM运行机制

    千次阅读 2022-03-14 20:00:32
    Java虚拟机机制屏蔽了底层运行平台的差别,真正实现了“一次编译,随处运行”。 Java运行过程 Java源文件(.java)——>Java编译器——>字节码文件(.class)——>类装载器——>字节码校检器—— >...
  • webpack运行机制与核心工作原理

    千次阅读 2020-07-26 21:31:52
    文章目录1.前言2.工作过程简介3....通过上面的学习,我们已经对 Webpack 两个最重要的特性:Loader 和插件机制有了深入的了解,今天我们再来解读一下 Webpack 的运行机制和核心工作原理。 2.工作过程简介 Webpa
  • 大数据Hadoop(二十三):MapReduce的运行机制详解

    千次阅读 多人点赞 2021-06-02 00:33:01
    MapReduce的运行机制详解 MapTask工作机制 简单概述:inputFile通过split被逻辑切分为多个split文件,通过Record按行读取内容给map(用户自己实现的)进行处理,数据被map处理结束之后交给...
  • 「硬核JS」一次搞懂JS运行机制

    千次阅读 2020-03-10 15:33:47
    从开始做前端到目前为止,陆续看了很多帖子讲JS运行机制,看过不久就忘了,还是自己理一遍好些 通过码字使自己对JS运行机制相关内容更加深刻(自己用心写过的贴子,内容也会牢记于心) 顺道给大家看看(我太难了,...
  • 新生代总结 JavaScript 运行机制解析

    千次阅读 多人点赞 2021-08-19 00:34:04
    新生代总结 JavaScript 运行机制解析 大家好,我是小丞同学,一名准大二的前端爱好者 这篇文章将带你一起学习理解 JavaScript 运行机制 愿你忠于自己,热爱生活 引言 在一些面试中,我们或许会被问到这样的问题 ...
  • Java程序运行机制及其运行过程

    万次阅读 多人点赞 2018-07-31 13:34:46
    java两种核心机制:java虚拟机跟垃圾回收机制。本文主要讲的是jvm运行java程序。 (一)终端中如何运行一个java程序(这个是我在mac下运行的,windows下原理是一样的,大同小异) 做这个事情的前提下,一定是jdk...
  • Java--运行机制及运行过程

    千次阅读 2021-12-17 00:01:39
    java语言有跨平台性,在 Windows Linux Mac上都可以运行,原因是: ... Java虚拟机机制屏蔽了底层运行平台的差距,实现 一次编译,到处运行。 JDK JRE 的区别: JDK 全称 Java开发工..
  • Zookeeper:运行机制和数据存储机制

    千次阅读 2018-09-21 08:10:52
    zookeeper的整体运行机制   zookeeper的整体运行机制   zookeeper的数据存储机制 数据存储形式 zookeeper中对用户的数据采用kv形式存储  只是zk有点特别,key是以路径的形式表示的 那就意味着,各key...
  • JVM 运行机制及其原理

    万次阅读 多人点赞 2018-05-22 22:15:09
    JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令...
  • ASP.NET运行原理和运行机制

    千次阅读 2017-11-17 08:23:53
    一、ASP.NET运行原理 当一个http请求发送过来并被IIS机收到之后,IIS首先通过你请求的页面类型为其加载相应的dll文件,然后在处理过程中将这条请求发送给能够处理这条请求的模块,而在ASP.NET中这个模块就叫做...
  • Java语言运行机制及运行过程

    千次阅读 2022-02-14 10:46:28
    Java语言运行机制及运行过程
  • TensorFlow的运行机制

    千次阅读 2018-04-15 20:41:39
    TensorFlow的命名来源于本身的运行原理...一 运行机制TensorFlow的运行机制属于“定义”和“运行”相分离。从操作层面可以抽象为两种:模型的构建和模型的运行。二 基本概念张量(Tensor):数据,即某一类型的多维...
  • Java程序运行机制简介

    千次阅读 2018-03-20 08:59:26
    Java程序运行机制 Java语言是一种特殊的高级语言,它既具有解释型语言的特征,也具有编译型语言的特征,因为Java程序要经过先编译,后解释两个步骤。 高级语言的运行机制 计算机高级语言按程序的执行方式可以...
  • web服务器运行机制

    千次阅读 2018-05-08 16:09:12
    web服务器运行机制: 1。浏览器发送请求数据到服务器 2。服务器解析请求参数 3。服务器处理用户请求 4。服务器生成响应数据 5。服务器向浏览器送回响应数据   客户端每次请求服务器需要完成如下步骤: ....
  • java语言运行机制

    千次阅读 2018-06-07 22:03:08
    1.java是编译型和解释型语言的结合体 ...注意:java字节码具有平台无关性,可以在各种不同系统平台中运行,但是需要有不同版本的java虚拟机,不同平台的java环境其Java虚拟机是不一样的。 2.JVM(Java Virtual Ma...
  • JavaScript单线程的运行机制

    千次阅读 2018-02-26 15:30:57
    每一种语言都有自己的运行机制,javascript当然也不例外,了解了js的运行机制,对于想要深入学习js的我们来说有着莫大的帮助。好了话不多说,下面开始讲述一js的整个运行机制,但是在此之前你先要了解几个概念。下面...
  • zookeeper的运行机制

    千次阅读 2021-11-30 15:27:03
    zookeeper的运行机制
  • Java应用程序的运行机制(介绍)

    千次阅读 2019-04-01 11:15:48
    1、原理 计算机高级语言的类型主要有编译型和解释型两种,而Java语言是两种类型的结合。 Java首先利用文本编辑器编写Java源程序,源文件的后缀名为.java;再利用编译器(javac)将源程序编译成字节码文件,字节码...
  • 理解Spark的运行机制

    千次阅读 2017-11-23 21:57:54
    在对spark整个生态系统有一个基本了解后,下面我们就关注的是其运行机制了,只有解了运行机制,才会对我们使用程序,或者排查问题以及性能调优起到很大的帮助。 下面我们看下spark任务的运行机制如下图: ...
  • vue.js的运行机制

    千次阅读 2018-09-12 12:48:09
    初始化之后调用$mount挂载组件,如果是运行时编译,即不存在render function但是存在template的情况,需要进行【编译】步骤。 3. 编译 编译三部曲,parse(解析)、optimize(标记静态节点做优化)、generate...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,795,873
精华内容 718,349
关键字:

运行机制

友情链接: 201696104031汪雪娇.zip