【面试】阿里巴巴Java经典面试题整理及答案详解

【面试】阿里巴巴Java经典面试题整理及答案详解Java开发工程师-面试题目集锦Java的数据结构有哪些?线性表,链表,栈,队列,图,树什么是OOP?面向对象编程面向对象编程的原则有哪些?单一职责原则:一个类中应该是一组相关性很高的函数、数据的封装! 开闭原则;对扩展开放,对修改关闭,即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象。只…

大家好,又见面了,我是你们的朋友全栈君。

阿里巴巴Java经典面试题整理及答案详解


1.说一下java类集

  • 类集是java实现的数据结构应用,如果只是使用,那么类集的操作非常简单,因为类集的核心接口有List,Set、Map、Iterator、Enumeration;
  • List子接口:是可以根据索引号取得内容,而在list集合里最容易问到的问题:ArrayList(包装了数组的集合,比较常用,数组是可变的)、LinkedList(链表的实现,搜索数据的时间复杂度为:n) 区别;
  • Set子接口:排序子类、HashSet与hashCode()和equals的关系;
    1. Hashset:重复的判断依靠的是hashcode()和equals(),但是它是无序的
    2. TreeSet:是有序的,依靠的是Comparable排序
    3. LinkedHashSet:继承了HashSet的特点,但是属于有序(增加顺序为保存顺序)
  • Map接口:Map.Entry、Iterator输出、HashMap、WeakHashMap(弱引用)。

如果只回答这一个问题,按以上几点说,这道题基本上就可以拿下,但也有可能追问其他的问题,例如:可能要求你现场编写一个链表,或者编写一个二叉树。这时候就要熟悉链表与二叉树的数据结构。

2、字符串哈西相等,equals相等吗?反过来呢?

凡是这类问相不相等的,写个程序测试是比较方便的办法。
范例:首先观察直接赋值
*提到字符串,首先就要想到共享数据词,共享常量词

image.png

image.png
范例:采用构造法

image.png

【面试】阿里巴巴Java经典面试题整理及答案详解
范例:字符串

image.png

【面试】阿里巴巴Java经典面试题整理及答案详解
总结:从正常道理来讲,如果hashCode()相同,那么equals一定相同。但是反过来equals相同,那么hashCode()也应该相同。

3、Spring的工作原理,控制反转是怎么实现的?自己写过滤器过滤编码怎么实现?

  • Spring的核心组成:IOC&DI(工厂设计)、AOP(代理设计、动态代理设计);
    • -Spring之中针对于XML的解析处理采用的是DOM4J的实现;
    • -Anntation的时候必须要求有一个容器;
  • 对于编码过滤需要考虑两种情况:
    • -Struts1.x、SpringMVC、JSP+Servlet:都可以以直接通过过滤器完成;
    • -Struts2.x:必须通过拦截器完成;
  • 实现:考虑到可扩展性的配置,所以在配置文件里面设置编码,在程序运行的时候动态取得设置的编码进行操作。但是需要设置两个操作:请求编码、回应编码。

4、框架的源码有没有看过?

  • 不要回答没有,即使你真的没有,你也别回答没有看过;
  • 框架的核心思想:反射+XML(Annotation)
    • -Struts2.X的设计:请求交由过滤器执行,而后过滤器交给控制器完成,后面由于将跳转路径等信息都写在了配置文件或知识Annoration里面,所以还需要进行这部分内容的加载;
    • -SpringMVC:它是基于方法的请求处理,所有的参数都提交到方法上,本质上还是一个DispatcherServlet;
    • -Hibernate:就是反射和DOM4J解析处理流程。

5、动态代理是怎么实现的?

  • 直接使用Invocation Handler接口进行实现,同时利用Proxy类设置动态请求对象;
  • 使用CGLIB来避免对于“代理设计模式需要使用接口实现”的限制。

6、action是单实例还是多实例?

  • Struts 2.x和Spring MVC中的Action都是多实例;
  • Struts 1.x的Action是单实例;
  • Struts 2.x和Spring MVC是否单实例可以控制,只要交由Spring管理的Action类,都可以通过“@scope=“prototype””来进行控制。

7、怎么配置bean?

这样的配置主要是在Spring里面,重点只有xml和annotation的扫描负责:

  • xml中直接使用”bean”,这样在Spring容器启动的时候就可以通过容器进行初始化;
  • annotation必须设置context命名空间,而后进行扫描包的配置。

8、修改单实例多实例.

“@scope=“prototype””来进行控制。

9.Java的设计模式

工厂设计模式、代理设计模式、单例设计模式、合成设计模式、门面设计模式(JDBC)、装饰设计模式、模版设计模式。

10.事务的控制

  • MySQL数据库如果想要使用事务,必须使用“type=innodb”这个数据引擎;
  • 事务的核心控制:commit、rollback;
  • 在Spring里面,利用AspectJ可以设置AOP的切面,而后进行声明式事务控制。

11. 脏读、幻读、不可重复读

  • 脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
  • 幻读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新的数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好像发生了幻觉一样。
  • 不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,第一个事务两次读到的数据可能是不一样的,这样就发生了在一个事务内两次读到的事务是不一样的,因此成为不可重复读。

12 .事务的传播属性

在Transaction Definition接口中定义了七个事务传播行为: 

  • PROPAGATION REQUIRED:如果存在一个事务,则支持当前事务,如果没有事务则开启一个新的事务;
  • PROPAGATION SUPPORTS:如果存在一个事务,支持当前事务,如果没有事务则非事务的执行,但是对于事务同步的事务管理器,PROPAGATION SUPPORTS与不使用事务有少许不同;
  • PROPAGATION MANDATORY:如果已经存在一个事务,支持当前事务,如果没有一个活动的事务,则抛出异常;
  • PROPAGATION REQUIRES NEW:总是开启一个新的事务,如果一个事务已经存在,则将这个存在的事务挂起;
  • PROPAGATION_NOT_SUPPORTED:总是非事务地执行,并挂起任何存在的事务;
  • PROPAGATION_NEVER:总是非事务地执行,如果存在一个活动事务,则抛出异常;
  • PROPAGATION NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动事务,则按Transaction Definition.PROPAGATION_REQUIRED属性执行。

13.购物车是怎么实现的?

购物车的实现基于:

  • Session:浏览器关闭后消失;
  • Cookie:数据保存在本地,如果切换到手机上无效;
  • 数据库:可以在不同的终端上持续操作。

你的实现:Ajax处理操作,处理购物车的应用,考虑到用户如果多的情况,并且访问量频繁,要单独设计一个购物车的子系统模块。

14.统计一天的订单量

  • 如果一天的订单预估才1W条,随便你折腾;
  • 绝对不可能使用COUNT()和WHERE;
    分时统计,如果系统统计到位,可以单独配置一个文件进行计数(需要考虑同步,一同步就慢),不应该出现在抢购环节中。

15.IN HAVING exsit

IN是判断具体的几项数据:
HAVING是针对于分组后的数据的筛选,依然要使用统计函数处理;
EXISTS:只是需要判断子查询里面是否有数据。

16.有没有用过定时任务?

Java本身提供有定时任务:Time Task、Timer;但是此类操作对于定时很难完成,它只能够做频率,但是这个频率不准,所以在定时开发之中会使用quartz组件,而且spring里面也提供有自己的定时实现,这个实现的好处是可以在准确的时间上进行触发。

17.JVM的内存管理

内存分为:栈(java虚拟机栈)、堆、程序计数器(类似于寄存器)、方法区、本地方法栈。
垃圾处理操作指的是堆内存:年轻代、老年代、永生代(JDK1.8移除)。会直接牵扯到JVM的内存调优问题。
推荐《深入java虚拟机》

18.堆内存、栈内存溢出

栈溢出:栈帧,所有的方法调用都是通过栈帧的形式控制的。栈如果保存的数据过多,那么就会产生内存溢出,如果堆内存中产生的数据量过大,那么就有可能出现“OutOfMemoryError”错误。

19.说一下缓存

缓存的主要目的是提高查询的效率,常见的两种缓存组件:EhCache(用于数据库)、OSCache(用于页面),除了这样的操作之外,还有缓存的数据库:redis、memcached,其中redis可以将数据保存到磁盘上,并且支持的数据类型要多于memcached。这种redis的数据库每秒并发的访问量可以达到15W次。

20.统计所有重名用户

还是需要考虑数据量问题,如果数据量大,考虑使用位图索引,如果数据量小就直接分组统计即可。

21. 使用InputStream用什么方法?

答:Read()方法

22. 在JQuery里面如何绑定一个事件?

答:on(“click”,function)

23. 在JQuery里面你使用的Ajax处理函数有哪些?

答:$. post()、$.get()、$.ajax()、$.jsonp()

24. 在Spring里面控制层的方法返回的是什么?

答:String或ModelAndView

25. 你简单描述一下WebService是什么?

答:Web服务调用,结合WSDL 与SOAP形成远程方法调用;现有两种:CXF、Jersey。

26. 你描述一下什么叫RPC?

答:RPC是一个远程过程调用,实际上WebService就是RPC的一种实现机制,RPC属于最原始的概念。

27. Spring的自动注入注解有哪些?

答:@Componet、@Service、@Repository、@Controller

28. 缓存是什么?

答:在ORM里面缓存有两种(一级、二级),主要使用的是EhCache组件实现。

29.使用MyBatis做模糊查询的时候,在日志中看到执行了sql语句,但是查询不到结果。

面对这样的问题,如果可以看到后台的日志出现有相关的信息显示,那么就表示现在的整体环境搭建是没有任何问题的,但是为什么数据没有呢?
个人经验总结有如下几点:
(1) 你的数据库里没有符合条件的数据,观察你的事务问题,更换一个新的客户端连接;
(2) 你在使用模糊查询的时候,所传递的参数可能就有问题,这个时候最好的解决方案,就是观察数据层里面传入的内容是否正确;
(3) 在使用模糊查询的时候千万要记住在关键字的左右增加一个“%”,如果没有加,那么就不叫模糊查询了;
(4) 你现在所连接的数据库并不是你真正的数据库。

30.在MyBatis的sql语句中使用if判断传递过来的某参数是不是null是有效的,但是却不能判断空字符串“ ’’’’ ”。

动态SQL是依靠配置实现的,它只能够判断null。你可以在业务层的处理上追加一些判断功能,例如:如果发现有内容为空字符串( ’’’’),那么你就为其设置null。
动态SQL很有帮助。

31.MyBatis和Hibernate中的set方法

MyBatis开发里面主要的核心是要求用户自己来定义使用的SQL语句。而Hibernate特点由于其要考虑其可移植性的问题,所以在Hibernate处理之中,它所需要考虑的就是一个自动生成SQL问题。
现在所有问题都放在了POJO类(VO)、Hibernate下,如果该POJO类的对象处于持久态状态,那么每一次调用setter方法都会更新数据(如果你的事务是手工控制,则在若干个setter调用后才会发出更新操作),而MyBatis没有这样的功能,因为Hibernate之中搞的这种对象的状态设计有些糟糕,而且这也是Hibernate本身性能低的原因。追究其起源,主要是因为传统的EJB(EntityBean)影响。

32.Resource与Autowired区别

在使用Spring的自动的Annotation注解的时候经常会见到两类的注解:@Resource(个人常用)、@Autowired ,如果你想要了解这两个的区别,最好的做法是先认真学完了spring依赖注入的时候讲解过的自动配置操作,在spring里面自动配置的模式有两类:按照类型、按照名称。
@Autowired:则表示按照类型进行自动注入,缺点是如果类型相同,则无法注入;
@Resource:具备按照类型自动注入的特点,而后如果现在类型相同,则可以设置一个名称,也就是说你使用@Component、@Service等注解设置自动扫描的时候可以设置一个名字,而这个名字就可在@Resource中使用了;
SpringBoot里面,因为其自动支持一些环境配置,如果使用的是Autowired,那么配置多个相同类型的Bean的话,将无法进行准确的注入操作。必须使用@Resource完成。

33.Hibernate控制反转

现在所说的是Hibernate中针对关系的配置处理,控制反转就是把控制权交给了对方,这种情况一般出现在数据的级联关系配置上:一对多、多对多。
以一个程序的分析为例:一个人有多本书,在Hibernate的世界里充满了神奇,它可以自动将没有的数据进行增加处理。正常的流程,首先要有一个人,这个人会有一个编号,在进行书的信息添加的时候就需要把这个人的编号一起保存进去。
如果不配置控制反转,它的处理:
——增加人的信息;
——增加所有书的信息,但此时人的保存的关联字段内容是null;
——再更新所有书的信息,将人的关系的内容保存进来。
正常的流程(控制反转,将子表与父表关联字段的使用控制权交给子表自己控制)是:
——保存人的信息,同时取得人的编号,将这些编号设置到书的内容里面;
——保存书的信息

34.SpringMVC返回值,使用SpringMVC的时候我看到两种风格的开发,一种是控制层的方法返回值类型主要是ModelAndView(就如我们的BSM项目),另外一种风格是返回值Spring类型,在开发中要怎么取舍?

从简单来讲就是ModelAndView,如果只是做一个过渡,符合MVC标准设计,可能有人就会认为返回ModelAndView需要实例化新对象太麻烦了,就直接返回String。
MVC的设计角度在于你需要通过控制层传输相应的对象信息给显示层来进行显示,而且业务层也会返回Map数据,这个时候就希望可以把Map的数据直接传递到JSP里面,这样的话使用ModelAndView就很简单。最关键的是ModelAndView整体的处理来讲是很容易的,只是一个跳转的页面路径,以及相关的属性设置,可以帮助一些基础不牢固的人员不使用错误的属性范围,例如:request。(如果要想更好的理解细节,那么就必须在项目之中感受。)

35.Hibernate是不是只能与Struts2组合才好?我怎么没看到SpringMVC+Hibernate的组合?

Hibernate实现的是一个数据层的开发框架,数据层是不会与MVC层产生任何直接联系,必须通过控制层与业务层来进行操作的处理后才可以使用。
最初的时候(2005)开始流行这个框架开发,使用最多的就是Struts1.X、Hibernate、Spring,而后就形成SSH的开发框架。现在的环境出现了改变,因为MyBatis出现之后会有人觉得Hibernate操作过于频繁,而MyBatis的开发更加简单。正因为如此,对于整体新项目设计而言就不会再过多的去考虑Hibernate了,基本上都是使用MyBatis开发框架。同时,在这个时期之后SpringMVC开始流行了,因为Struts毕竟需要与Spring整合,有人认为麻烦,现在对于开发就可能有如下几种结构:
Struts 2.X+Hibernate+Spring;
Struts 2.X+MyBatis+Spring;
SpringMVC+Hibernate;
SpringMVC+MyBatis。

36.SSH整合

SSH整合实际上需要考虑到一个核心的问题:Struts之所以要整合到Spring之中主要是希望可以利用里面的IOC&DI机制实现业务层接口对象的注入处理,如果不使用Spring去管理Struts,那么无法直接利用容器注入的模式来实现业务层接口对象的配置,这样整个的整合效果就会出现严重的问题。
从另外一个角度来讲,虽然Struts支持Spring管理,但毕竟Spring属于两个开发框架,所以从2016年开始许多互联网公司的开发都不再选择使用Struts 2.x,但这并不表示Struts 2.x没有人使用,许多传统公司还在使用着。

37.ShiroRealm机制

Realm是几乎所有的认证授权框架都具备的一个概念,Realm本身有两层含义:
(1)进行用户的认证处理:主要是进行用户名或密码的判断,同时还可以判断出该用户是否被锁定;
(2)用户的授权处理:进行角色或权限认证,而且这里的认证所需要的就是根据用户名查询角色或权限标记。对于授权处理需要一些特殊处理方式:授权的操作在实际检测之中有两类:
——实时授权检测:修改了一个用户的角色或权限之后该配置立即生效,而且立即影响到已登陆的用户,这样的操作需要频繁进行数据库的查询处理,所以一般不建议使用;
——非实时授权检测:因为用户的角色和权限几乎很少会被改动,所以这样频繁的进行数据库的查询,性能会比较差。在实际开发之中,会考虑在用户第一次使用角色和权限的时候将数据信息查询出来。如果是单节点,会将授权信息保存在内存里(EhCache),如果是分布式集群,会将这些信息保存在Redis里面,总之就一个原则,不要在用户授权检测的时候重复查询数据库即可。
总结:ShiroRealm有一套自己的Session,在WEB中该Session会在HttpSession里面保存数据,但用户看不见这些。所有的授权处理一定要使用缓存,否则会影响程序性能。

38.Shiro中的Session与HttpSession的关系是什么?

如果说你现在使用的不是WEB程序,而是一个Java程序,那么Shiro中的认证与授权依然有效。可以得出一个结论:Shiro有一套自己维护的“Session”机制(不等同于HttpSession),如果要在WEB中应用,实际上就表示该Shiro Session要结合HttpSession一起使用,也就是说在Shiro Session中保存的内容在WEB容器里面实质上是保存在了HttpSession里面。
理解为:HttpSession中存在一个指定的Shiro属性,Shiro在设计的时候考虑到了用户的使用习惯,所以对于一些用户的身份信息,会将这些身份信息保存在Session里面,用户也可以直接利用Session属性取得相关的身份信息。

39.Shiro与Redis整合操作

前提是你的系统之中有多个WEB容器,并且使用了负载均衡,例如:Nginx。

image.png

如果要想实现Session数据的共享,那么需要继承一个默认的企业SsessionDAO管理器:

image.png

里面就是针对Redis数据的CRUD操作。

如果要想实现缓存数据的共享(角色或者权限),那么就去继承一个默认的缓存管理器:

image.png
CacheManager、同时还需要去实现一个Cache的接口的子类才可以实现这样的共享操作。
在整个流程之中你还需要考虑Tomcat的Session缓存。

image.png

如果想要实现缓存:需要知道Nginx、Shiro的具体操作类的方法、Jedis工具类、Redis使用,这样才能去做集群的Session的缓存处理过程。

40.String str=“hello”,这个字符串对象在栈内存中明明有一个引用(str[ox00010]),为什么还说这个字符串是匿名对象呢?

所谓的字符串是匿名对象,实际上是因为只要使用了“’’”声明,那么就表示将在堆内存空间里面开辟一个新的字符串对象(String对象),这个对象是可以直接使用的,例如:““hello”.length()”。这个时候的字符串由于没有引用,所以称为匿名对象,对于此时的代码“String str=“hello””,已经明确的为str对象进行实例化,所以“hello”对应的堆内存的地址已经有了明确的栈内存指向,就不是匿名对象了。

41.当使用直接赋值的方式实例化一个字符串对象的时候,他的引用是保存在哪里的?

只要是引用对象就保存在堆内存里面,而我们所有能够进行的内存控制,也只有堆内存。

42,对象池(常量池)和栈是什么关系?

不论是对象池还是常量池,都是保存在堆内存里面的,而堆内存需要进行一些合理的划分。
image.png

43.不同的操作系统会由软件和硬件模拟出不同的虚拟机,但是不同的JVM对Java程序度支持,能实现这个功能的原理是不是:虚拟机中定义了类似于接口这样的操作,接口中定义了类似native抽象方法,然后具体方法的实现交给操作系统去完成?

对于JVM有三种实现标准,这三种实现标准我们使用的是HotSpot虚拟机标准,这个标准的实现不是简单的调用一些底层函数。它里面是需要与一些设备进行交互的,而整个系统设计之中,为了可以让Java调用函数功能,专门提供有一个native交由JVM负责实现一些具体功能。

44.JVM内存优化

(1)JVM优化的第一个问题,取消掉伸缩区,让total=max;
—— CMS问题,频繁的CMS会导致性能下降;
——伊甸园区、存活区、老年代的关系要说明白,JDK1.8之后取消了永久代,而使用元空间代替。
(2)如果你的内存过大,要使用GI收集器来进行收集;
(3)在Tomcat里面由于其使用基于JVM,所以需要设置一个“JAVA OPTS”指令,可以将全部的内存供Tomcat使用(默认的最大可用内存为全部内存的四分之一,默认的total内存为全部内存的64分之1)。

45.JVM内存组成

JVM内存组成里面最为关键的几个内存:
(1)栈内存:只是保存有堆内存的引用地址,而且从一个简单的角度来讲,栈内存可以保存基本类型
(2)堆内存:Java没有采用句柄的模式进行引用,所以它的引用性能是最高的,但是从另外一个角度来讲,堆内存里面实际上又分为若干个子内存空间:伊甸园区、存活区、老年代(FullGC、MajorGC);
①原则:少产生无用的大量内存空间,因为会引发频繁的GC,而频繁的GC会带来CMS问题,那么会导致程序中断执行,所以这个处理的原则之中对于程序员的要求;
②让你初始化的空间大小等于整个堆内存的分配大小,避免伸缩区,这样可以进行性能的提升;
(3)方法区(JDK1.8以前可以称为永久代,在JDK1.8之后称为元空间);
(4)全局数据区也可以认为其规划在堆内存里面,因为会发现全局数据区中保存的内容有可能是对象,有可能是基本类型,只不过它采用了一种特殊的处理形式而已。
在面试中还有可能问到的是堆内存的组成以及GC的处理流程。

46.HashMap需要resize时扩容因子是如何得到的?

如果要想解决这个问题还是需要进行源代码的深入研究,也就是说对于基本的数据结构(类集)。
在进行数据添加的时候这个里面存在有一个put()方法:

image.png

在put()方法里面可以发现有一个putVal方法(),而且可以发现这个方法首先进行了hash计算(查找),而后在这个方法的实现定义:

image.png

它的容量扩充指的是一开始放30个,如果发现不够了,则进行位移处理,302,那么再一次扩充302*2。

47.说出RuntimeException和非RuntimeException的区别

这里最容易让你混淆的只是一些名词:
java.lang.Runtime类:是一个具备有单例设计模式的开发类,在每一个JVM的进程中只会存在一个Runtime类的对象,这个类给我们最大的帮助在于可以取得一些系统信息或者进行一些进程的处理操作。基本上使用这个类取得一些内存信息或者进行垃圾收集处理。(GC)

image.png

整个JVM内存划分存在伸缩区,面对这样的问题,为了提升性能,往往会将初始化内存与最大内存设为相同。(如果不相同,那么就需要一直进行空间的判断,而后不断进行空间的分配,这样操作是比较可怕的。)

image.png

RuntimeException的异常子类不需要强制性处理,可以由用户选择性处理,而Exception子类必须进行处理,RuntimeException是Exception子类。
这些问题放在一起,就是为了混淆你的认识,这样才有的和你谈,也是为了考察你的基本功是不是扎实。

48.Java内存模型

(1)看你是否是知道Java的内存划分;
(2)看你是否有过具体的工作经验,因为在实际的开发之中,如果不调整内存,那么性能将会造成极大的浪费;
(3)关于GC的解释操作。
说到内存,可能最直观的理解就在于Runtime类中,这个类采用了单例设计模式,这个类之中提供了内存信息的取得,以及系统垃圾的收集处理操作。

范例:取得默认的内存大小:

image.png
这三个方法的返回值类型都是long,所以返回的数据单位都是字节。

实际在Java里面如果想要进行内存的变更,就需要掌握一下内存的结构(内存模型)。

在Java里面对于内存的空间可以划分为如下几点:
1.伊甸园区:新生的对象都保存在此处,但这些新生的对象不一定会一直存活;
此处也属于内存空间,既然是内存空间一定会被占满,如果占满了,就会执行GC操作;
2.旧生代区:如果某些对象其要一直使用,那么就将进入到旧生代区,这属于二级回收保险;
如果要先执行GC,那么肯定先清理伊甸园区,随后如果发现空间不足,继续清理旧生代区;
3.永久区:永久区中的数据不会清除,即使程序出现了“OutOfMemoryError”也不会清除。

范例:直观的观察内存

image.png

image.png

image.png

调整内存大小:-Xms2048M-Xmx2048M-Xmn1024M
(1)“-Xms”:初始分配的内存大小,默认在物理内存的64分之1,但是小于1G;
(2)“-Xmx”:最大分配内存,默认大小为物理内存的4分之1,但是小于1G;
(3)“-Xmn”:设置年轻代(伊甸园区)的堆内存大小;

只有调整之后才可以保证系统内存会得到提升,这样很明显,你就可以发挥出你电脑的性能,因为默认的大小。
 

原文链接

  1. https://blog.csdn.net/alitech2017/article/details/104251875
  2. https://blog.csdn.net/alitech2017/article/details/104382404
  3. https://blog.csdn.net/alitech2017/article/details/104530904
  4. https://blog.csdn.net/alitech2017/article/details/104530943
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156896.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux配置虚拟ip_虚拟机静态ip

    linux配置虚拟ip_虚拟机静态ipLinux下配置网卡ip别名何谓ip别名?用windows的话说,就是为一个网卡配置多个ip。什么场合增加ip别名能派上用场?布网需要、多ip访问测试、特定软件对多ip的需要…andsoon.下面通过几个例子简单介绍一下如何使用ifconfig命令给网卡配置ip别名。一、首先为服务器网卡配置静态ip地址#ifconfigeth0192.168.6.99netmask25…

    2022年10月20日
  • 苹果绕id完美重启_iphone重启要输入id密码

    苹果绕id完美重启_iphone重启要输入id密码朋友捡到一个iphone6,已经很老的版本了,并且拆修过,手机没有关机等着人家来要,但是第二天就变成iphone已停用,估计别人也是觉得不值得找回了吧。手机就相当于是砖头了,然后交给我,让我尝试激活成功教程试试。在B站看了几个视频,发现网上有很多激活成功教程的软件,但是都是不能当电话用了,只能当做小pad用了,有的软件激活成功教程后不能关机重启,因为一旦关机重启就又锁上了,有的软件激活成功教程后不能登录iCloud,应该就是说不能登录AppID,不能登录应该就不能通过AppStore下载软件了吧。有的软件是通过删除基带的方式,这种方式据

  • java求最大公约数

    java求最大公约数

  • linux中常用的文件查找命令–find命令的用法

    linux中常用的文件查找命令–find命令的用法

  • 解决 ERROR: Command errored out with exit status 128: git clone -q

    解决 ERROR: Command errored out with exit status 128: git clone -q在安装git+github网页时出现此错误,全称是ERROR:Commanderroredoutwithexitstatus128:gitclone-qhttps://github.com/ildoonet/pytorch-gradual-warmup-lr.git/tmp/pip-req-build-88ue_mqlCheckthelogsforfullcommandoutput.参考解决方案https://github.com/spdx/spdx-onl

  • 详解 ManualResetEvent

    详解 ManualResetEvent今天详细说一下ManualResetEvent它可以通知一个或多个正在等待的线程已发生事件,允许线程通过发信号互相通信,来控制线程是否可心访问资源当一个线程开始一个活动(此活动必须完成后,其他线程才能

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号