JVM深入探索与实践,谈谈我的理解

9 篇文章 0 订阅

         今天拿到复印到75页概述,估计很少讲解细节的,准备在网上订的《深入JAVA虚拟机 原书第二版》,看来需要2天时间,京东和亚马逊还没有,嗨,毕竟是2000年的书籍,基于jdk1.4的。据说2002年出现一本《java虚拟机规范 1.7SE》,还是比较不错的。2010之后出现了2本国人写的《深入理解Java虚拟机++JVM高级特性与最佳实践》,书的内容比较新,剧很多人反应,学习虚拟机还是要从00年的那本看看。面对正义,所以先找了概述看看。总结几张图,看完基本上了解了。很多细节的白天补上去。毕竟深夜在寝室敲文字会引起众怒的~~囧。


JAVA技术关系概述:

     



JVM体系结构








JVM运行过程





JVM在设备上的地位






(重点记忆)JVM构架图



最后一张图要给出一个总结了:

类装载子系统开始,顾名思义是装载类给jvm的。这里需要注意一点是,装载后的装载类classloader可能还依旧存在。与后面装载的类的实例是否GC回收也是必要条件。

方法区:存储了类的基础信息,一定要明确的是,这是一块共享区。静态变量static或者static声明的方法与块都存在这里面。

这篇博文写的大概,想相信了解的戳进去看看

http://xtu-tja-163-com.iteye.com/blog/769992


JAVA堆:java堆与java栈可以说是jvm的2块运行主力。

heap(堆)中存放new出来的实力!一定是创建的对象。有固定的限制,溢出发生OOM,这个比较常见,一般就是new的对象多了~,检查下是不是循环创建对象了。里面也保存着引用数据,确定是数据,而非引用。这点比较奇葩,就是比如说方法(方法运行的逻辑存在栈stack中)中有一个引用数据类型的引用,那么在操作数据的时候,他会将heap中的数据,复制到stack中进行操作,完成后,复制回去~。

java栈:原始数据类型存储在栈中。还有引用数据类型的引用,常量池(在栈中的永久区),对于常量,一般在运行的时候已经确定的,也有一个特殊的方法可以动态迁移的方法,就是string.intern();可以将字符串从堆中迁移到常量池,如果迁移过多,会发生OOM异常。这也是jvm性能调优的重点区域。很多参数配置都将针对这个区域。垃圾回收算法(先看下垃圾回收算法的历史,然后再看看目前最先进的G1算法)等,算法不是太难。

对于栈的结构,单位是stack frame。里面有方法的pre和next地址,方法索引,参数,变量等。配合程序计数器(记录下一次的操作指令)进行运行。

查阅了heap与stack的历史可以看出,这是落实了java面向对象,数据与逻辑分离的思想而给出的jvm运行方案。

本地方法栈:这个栈可用也可以不用,记得是native这个关键字声明的方法可以写其他语言,嵌入其他语言来驱动特定的硬件操作系统。比如说打印服务什么的。不过现在很多都可以使用第三方的网络服务来提供,估计以后用的不是太多。必经这个地区安全性隐患比较大,因为他也可以操作和访问jvm。当初java语言的目的也是先用刀嵌入式设备的。当时c,c++盛行,也是准备吸收他们,为我所用的设计吧。其实这句是猜测的~~~


执行引擎:很多虚拟机资料都用JIN来代表他,这边找到一个博文详细的介绍了

http://alimama.iteye.com/blog/1388908


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值