博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题
阅读量:6902 次
发布时间:2019-06-27

本文共 2281 字,大约阅读时间需要 7 分钟。

hot3.png

一:finnally中抛出异常情况

 1:   java中的异常程序图

所有的异常都是集成Throwable接口,异常有主要分为两大类,一个是Error,一个是Exception,

Error主要是错误,平常余件比较多的就是StackOverFlowError和OutOfMemoryError,一般遇到这种错误,虚拟机就会线则停止线程。

Exception是程序允许的异常,主要分为运行时异常和非运行时异常

非运行时异常就是在I/O操作,数据库操作的时候,如果我们不处理,编译器就不会允许编译通过的异常比如FileNotFoundException

运行时异常就是我们平常处理的,比如经常有的数组越界,类转换错误,数字类型的错误等等,这些是我们可以从程序逻辑上规避的

    2:处理异常

    一般我们处理异常的时候基本都是抛出或者捕获

    抛出异常:直接throws出去,本身不处理,直接抛到方法之外

    捕获异常:通过try-catch-finnally机制进行异常的捕获处理,程序本身作处理

    try:用于捕获异常,后面一般跟着一个或者多个catch快,如果没有,那么要有finnally操作

    catch:一般用来捕获try中抛出的异常

    finnally:无论方法是否捕获异常,finnally语句都会被执行,在try和catch中有return的时候,finnally会在方法返回之前被执行,但是一下情况,finnally并不会执行

    1:finnally块中如果发生了异常

    2:在try或者catch中调用了System.exit()方法(JVM过早被终止了)

    3:当前线程已经结束

    4:CPU被关闭

当发finally中有return的时候,会覆盖catch和try中的值,所以finnally中慎用return

当finally和catch中存在throw 异常的时候,finally会覆盖catch中的异常,最后以finally为主

 

二:操作系统的一级缓存二级缓存

现在买电脑的时候经常会发现什么三级缓存

加入缓存的原因就是CPU的计算速度和磁盘I/O速度极度不匹配,一般都是加入了二级缓存,还有的比较高级的加入了三级缓存,

存储器一般分为静态RAM,和动态RAM,操作系统缓存的实现就是利用SRAM来实现,因为他不需要刷新,直接可以存储数据,而且速度比动态RAM快,我们内存一般使用的DRAM。

操作系统的缓存类似我们数据库前面加入的缓存,都是把最近访问频率多的数据放在缓存中,没有的话就会去内存中查找,然后找到了,在拷贝到缓存中,命中率一般百分之八十左右,

一级缓存:

Intel和AMD的实现不同,AMD的一级缓存设置的比较大,但是Intel的一级缓存设置的比较小,他认为如果缓存太大,还会浪费寻址时间

二级缓存:

相反的是,Intel的二级缓存比较大,AMD的二级缓存比较小

三级缓存:

一般来说三级缓存都是分为层级的,每一级缓存中存储的数据都是下一层的一部分,三级缓存的容量也是逐级递增的,相应的成本和工艺也是递减的,CPU读取数据的时候会先从一级缓存中读取,如果没有在去查找二级缓存,二级缓存没有在去查找三级缓存,实在没有才会去查找内存中的,一般来说每级的命中率都在80%左右,也就是说,所有数据的80%都可以在一级缓存中找到,剩下的20%也可以在二级缓存,三级缓存和内存中找到,所以一级缓存是很重要的。

那么data load 到Cache中,还会有一个问题,就是何时去淘汰无用的数据,一般来用的LRU算法,包括现在NoSql数据库redis也是采用这种算法,最少使用的去淘汰。

三:JVM设计规则,如何设计JVM

根据Java SE7规范规定了以下核心组建:

java虚拟机特点如下:

    1:基于栈存储结果,Intel和AMD是基于寄存器架构的,JVM是基于栈的

    2:符号引用,除了基本数据类型因外的数据(类和接口)的引用,都是采用了符号引用,而不是显式的使用内存地址调用

    3:垃圾回收机制,类的实例都是用户来创建,但是垃圾回收是通过垃圾回收机制进行回首

  4:通过基本类型的清晰定义来保证平台无关性,在c和c++中,int的大小取决于平台,但是在java中,int就是4个字节,于平台无关,至于jvm有关

    5:网络字节码顺序,java class文件是采用网络字节码进行存储,为了保证与小端的Intel x86架构和大端的RISC架构无关性,java采用的大端序(端序是指内存中数据存放顺序,一个字节的号说,如果是多个字节,小端序就是低字节存储在低位,高位字节存储高位,大端序正好相反)

四:Object o = new Object();用到了jvm那些

1:首先去检查jvm常量池中找到该类的符号引用,如果没有的话

2:如果jvm常量池中没有该类的符号引用,首先Object o 映射到jvm中就是一个一个reference类型的引用,存储在本地变量表中(Java虚拟机栈中)

3:new Object()创建的对象存在堆上

4:关于类的描述(对象类型,父类,实现的接口,方法等)存储在方法区

当访问这个对象的时候由来嗯中,reference执行一个句柄,句柄执行了对象的实例,这样的好处就是当移动对象的时候,只需要改变句柄的值就ok

第二种就是reference直接指向对象,这样的好处就是减少了寻址时间,Sun的HotSpot虚拟机就是采用了这种寻址方式

 

转载于:https://my.oschina.net/u/1034481/blog/825101

你可能感兴趣的文章
在jmeter测试mysql中如何一次运行多条sql语句
查看>>
RPC框架性能基本比较测试
查看>>
git安装
查看>>
SEO黑页以及门页框架和JS跳转实现方法
查看>>
html5 Ajax 访问.net WebApi获取视频流
查看>>
[HNOI2008]玩具装箱TOY
查看>>
luogu P1801 黑匣子_NOI导刊2010提高(06)
查看>>
Java jdk环境变量配置
查看>>
Given Name.Family Name的区别
查看>>
读取Mysql的一种的方式
查看>>
信息安全--仿射密码
查看>>
深入浅出javascript(二)函数和this对象
查看>>
Form 对象
查看>>
Codeforces Round #533(Div. 2) C.Ayoub and Lost Array
查看>>
HDU - 3966-Aragorn' Story(树链剖分+线段树)
查看>>
Linux基础第五章 进程控制
查看>>
[转载]孤儿进程与僵尸进程[总结]
查看>>
jquery事件机制扩展,jquery鼠标右键事件。
查看>>
windows phone Image checkbox
查看>>
[pycharm]远程调试服务器项目
查看>>