对战-3~5年浩鲸云计算

目录

一.JVM分区

二.Spring Cloud 常用组件

三.Spring Cloud 与Dubbo

四.Spring IOC和AOP是什么,项目中哪些功能用到

五.SpringBoot和Spring比较

六.Java什么情况下会内存溢出,怎么处理


一.JVM分区

JVM有五大分区,程序计数器、虚拟机栈、本地方法栈、堆、方法区。

  1. 程序计数器,是当前程序执行的行号指示器。通过改变计数器的值,来确定下一条指令,比如循环、跳转、分支、异常处理、线程恢复等都以来计数器来完成。程序计数器的存储的数据所占空间的大小不会随着程序改变,所以程序计数器不会发生内存溢出(OutOfMemory);

  2. 虚拟机栈,即栈内存,是java执行方法的内存模型。每个方法执行的时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法返回的地址等信息。程序变量表存储的是基本数据类型、returnAddress类型和对象引用。程序变量表的大小是在程序编译期间完成分配,在程序执行期间不会发生改变。操作数栈主要用来存储运算结果及运算的操作数。在数据结构中,栈最典型的应用就是对表达式求值。程序中所有的计算过程都是借用操作数栈完成的。

  3. 本地方法栈,与虚拟机栈类似,不过本地方法栈为虚拟机使用本地方法(native)服务。

  4. ,是java所有线程共享的一个内存,虚拟机的启动和创建,几乎所有的对象实例都在这里创建,因此该区域经常发生垃圾回收。从内存回收的角度看,由于现在的收集器基本都是采用分代回收算法,所以java堆中还可以分为新生代和老年代。新生代又分为Eden空间、From Survivor空间、To Survivor空间。

  5. 方法区,与java堆一样,是各个线程共享的内存区域,不需要连续的内存,并且可以动态扩展,动态扩展失败一样会抛出OutOfMemoryError异常。方法区用于存放虚拟机已经加载的类信息、常量、静态变量、即时编译器编译的代码等数据。java虚拟机把方法区描述为堆的一个逻辑部分,为了与java堆区分开,方法区又叫非堆,很多人跟愿意称之为永久代。从JDK1.7开始准备“去永久代“规划,1.7的HotSpot中,已经把原来放在方法区中的静态变量、字符串常量池等转移到堆内存中。在JDK1.8中,永久代已经不存在,存储的类信息、编译器编译后的代码等已经转移到元空间(MateSpace)中,元空间并没有处于堆内存中,而是直接占用本地内存。

二.Spring Cloud 常用组件

  1. Spring Cloud Eureka,构成Eureka的体系包括服务注册中心、服务提供者、服务消费者。
  2. Spring Cloud Ribbon,客户端负载均衡器。Eureka只是维护了服务注册中心、生产者和消费者三者之间的关系,真正的服务消费者调用服务生产者提供的数据,是通过Spring Cloud Ribbon来实现的。服务消费者是将服务从服务注册中心获取服务生产者列表维护在本地的,这种客户端发现模式的方式是服务消费者选择合适的节点进行访问服务生产者提供的数据,选择合适节点的过程,就是Spring Cloud Ribbon完成的。
  3. Spring Cloud Feign,是一个web服务客户端。它使Eureka和Ribbon的使用更加简单。如果NetFlix Ribbon依赖关系也在类路径中,那么Feign默认也会负责负载均衡。
  4. Spring Cloud HysTrix,断路器,防止系统对某一故障服务持续进行访问。当一个服务出现故障,而服务调用方不知道它发生了故障,若此时调用方的请求不断增加,最后就会等待发生故障的依赖方,相应形成任务积压,最终导致自身服务瘫痪。
  5. Spring Cloud Config,分布式配置中心组件。支持配置服务放在配置服务的内存中(即本地),也支持远程Git仓库。Config中分为两个角色,config server和config client。config server用于配置属性的存储,存储的位置可以是Git仓库、Svn仓库或者本地文件等。config client用于服务属性的读取。
  6. Spring Cloud Zuul,服务网关。通过服务网关统一向外部提供Rest API服务过程中,除了具备服务路由,负载均衡功能之外,还具备了权限控制等功能。为微服务架构提供前门保护作用,同时将权限控制这些比较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体具备更高的可复用性和可测试性。
  7. Spring Cloud Bus,消息总线。动态更新服务配置。

三.Spring Cloud 与Dubbo

  1. 服务调用方式,dubbo是RPC;Spring Cloud时Rest API;
  2. 注册中心,dubbo时zookeeper,Spring Cloud 是eureka,也可以是zookeeper;
  3. 服务网关,dubbo没有实现,Spring Cloud 有Zuul插件负责服务网关,负责消费者请求分发。
  4. Spring Cloud支持断路器;与git完美集成配置文件支持版本控制;消息总线实现配置文件的更新和服务自动装配等

四.Spring IOC和AOP是什么,项目中哪些功能用到

  1. IOC,控制反转,也可以叫依赖注入。利用工厂模式,将对象交给容器处理,容器会根据配置文件的配置,自动生成类的实例对象和管理对象。在spring容器启动的时候,容器会将这些bean初始化好,在需要调用的时候,可以直接使用。
  2. AOP,面向切面编程,就是纵向编程。将一些功能剥离出来,统一管理,在具体运行时,由容器进行动态织入。主要用到的场景有,日志记录、签名校验、参数校验、事务管理以及异常处理等。

五.SpringBoot和Spring比较

Spring Boot是Spring的扩展,消除配置Spring应用程序的xml文件配置。是开发变得更快更高效。

Spring Boot提供默认配置,提供可插拔设计。

六.Java什么情况下会内存溢出,怎么处理

  1. 栈内存溢出,线程过多创建。解决方法,使用线程池,设置固定长度的线程池,合理利用线程资源,避免过多的创建线程。如果计算型的业务,线程数量和CPU数量一致,如果是IO操作的业务,推荐设置CPU数量的两倍。另外就是调整JVM栈大小。
  2. 堆溢出,堆中主要存储的是对象,如果不断的new对象,垃圾回收器来不及回收,则会造成对内存溢出。可以调整JVM(-Xmx4096M )堆的总大小。
  3. 永久代溢出。jdk1.7和1.8移除了永久代,所以代码1.6有可能发生永久代溢出。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章