当前位置:首页 > 内存 > 正文

jvm内存模型面试题

  • 内存
  • 2024-05-11 10:12:58
  • 9684

一、Java基础面试题都有哪些?一、Java异常机制原理及应用
答:每当程序发生异常时,如果程序没有进行相应的处理,程序就会被终止。
实际上,异常发生后,JVM会抛出该异常类的实例化对象。如果当时用try语句捕获的话,就可以处理异常,否则就通过了。交给JVM进行处理。一旦try语句捕获到异常,就会与catch语句的异常类型进行匹配。如果匹配成功,则执行catch语句。简单应用:在所有的throws语句中添加try-catch。标准应用:与try-catch-finally-throw-throws一起使用。
2.垃圾收集机制的优点
答案:释放不必要的对象所占用的空间。方式:自动回收、手动回收。使用(),实际上是调用time().gc()
3.错误和异常的区别
答:Error是由jvm处理的,是jvm。产生错误
异常可以由程序处理,可以用try-catch捕获
,finally,finalize
答:Final定义的变量不能修改,定义的方法不能覆盖,定义的类不能继承
finally是异常的统一输出,finalize是垃圾回收前的收尾工作,由类定义
5个对象。AnonymousInnerClass可以扩展吗?是否可以实现接口
答:允许继承和实现,因为匿名内部类是基于抽象类和接口开发的
6.StaticNestedClass和InnerClass的区别
答:使用Static定义的类是外部类,可以直接通过外部类和部类访问
内部类不能从外部访问,只能访问内部类实例通过外部类实例可以找到。
p和HashTable?
答:HashMap:1)jdk1.2中发布,newClass2)采用异步处理,性能高性能,非线程安全3)允许null
HashTable:
1)jdk1中发布。0、oldClass
2)使用同步处理,性能低且线程安全
3)不允许为Null
8.断言是什么意思?
答:asserts是jdk1.4之后发布的新关键字,意思是断言,即程序在某个地方执行时,必须有预期的值。一般开发中很少使用。要使用断言,必须添加-ea
9参数。什么是gc?
答:gc是垃圾回收。使用gc释放垃圾空间。
s=newString("xyz")生成了多少个对象?
答案:一个匿名对象xyz,位于堆栈空间中。在堆空间中实例化的新对象。
()etwait()?
答:sleep()是Thread类的定义方法,表示线程休眠,可以自动唤醒
wait()方法是Object类定义的方法,需要手动通知,notifyAll()//sleep()不释放资源,wait()释放资源
12.和Override
答案:Overriding:重写
|-一个类中定义的多个方法
|-所有方法名称都相同,但参数类型或数字不同
|-只有参数绑定,而不是返回类型
Override:覆盖
|-继承关系中
|-子类定义了与父类同名的方法,参数类型或数字必须完全相同。
|-访问权限不能再严格
13.抽象类和接口有什么区别?
答案:抽象类:
|-由抽象方法和常量、变量、全局常量、构造函数和普通方法组
|-使用抽象声明
|-子类必须继承通过扩展抽象类。如果子类不是抽象类,则必须重写抽象类的所有抽象方法
|-单继承有限制
|-抽象类可以实现多个接口
接口:
|-由抽象方法和全局常量组成
|-使用interface关键字
|-子类必须通过实现来实现接口。如果子类不是抽象类,必须重写抽象类的所有抽象方法
|-子类可以实现多个接口
|-接口不能继承抽象类,但它是允许从多个接口继承
二、java面试题:如何解决内存溢出首先,对所有代码进行彻底的审查和检查,包括页面上的Java代码,
1.特别注意那些静态对象,尤其是Map、List、Set等类型的对象。变量会一直驻留在内存中,并且有很长的生命周期,不会被垃圾收集器回收。
2.对于代码,要审查是否产生大量冗余对象,以及一些逻辑业务处理类,算法是否过于复杂,调整算法,仔细审查代码,然后仔细重构代码,可以提高代码质量,提高程序运行的稳定性。
中的内存溢出大多是由于栈中的变量过多造成的。其实,记忆还有很多。建议尽量将未使用的元素设置为null以便回收,多使用局部变量,少使用成员变量。
1).变量中的对象更大,占用更多内存。
2)变量中的对象生命周期较长。
3)、变量所包含的对象数据是稳定的。
4)、该类的对象实例对变量中的对象有共享要求。
4.我的程序中的静态变量优化后,程序占用的内存量至少增加了5k到10k。所以不能忽视。
其次,还有一些关于字符串类的事情:
1.对字符串进行分组时,一定要使用StringBuffer的append方法,并且不要使用+运算符连接两个字符串。差别很大。并且不要在循环或一些重复动作中创建String对象,因为String对象是使用StringBuffer对象处理的,一个String对象应该产生三个对象(也许像这样:))。
2.使用StringLength()方法获取字符串长度时,不要将长度放入循环中,可以在循环外获取值。(包括矢量幅度法)。尤其是循环较多的时候,尽量把长度放在循环之外。
intsize=();
for(inti=2;i...
3处理内存溢出
尝试{
//dosth
....
}catch(outofmemoryerrore){//可以使用普通函数来实现。
(“nomemory!”);
();
//dosthagain
....
 4.对于频繁的应用最好控制一下内存和内存释放自己实现,但是()方法可能不适用,最好使用terminate强制执行或者自己写terminate方法。Java中并不能保证每次调用该方法时都会启动垃圾收集,它只会向JVM发出这样的请求,并且不知道是否会执行垃圾收集。