`
julyboxer
  • 浏览: 215561 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JVM小记

    博客分类:
  • java
阅读更多

JVM内存分布
方法区:包含类数据,方法数据
堆区:包含对象
Java栈:包含线程的临时数据。当线程运行的时候,每个java方法都有自己的栈桢。里面包含每个Java调用时的状态 
局部变量区,通过索引访问
操作数区,通过出栈入入栈访问
帆数据区 :用来支持常量池解析,正常方法返回及异常派发处理,
永远都不会在局部变量区及操作数区发现对象的拷贝,只会发现对象的引用

PC寄存器
本地方法区:包含本地方法

JVM类的装载系统
启动类加载器
扩展类加载器
自定义类加载器


类对于每个class字节码都有四次的验证:
第一次检查头文件是否正确  Class文件结构检查
第二次检查语法是否规范   类型数据的语义检查
第三次检查语法定义的类是否存在 字节码检查:确保操作数栈中总是包含正确的数值及正确的类型,它必须保证局部变量在赋予合适的值前不能够被访问,而且类的字段中总
是被赋予正确的类型值。类的方法被调用时总是传递正确的数值及类型的参数 .此次检查并不能够检查出所有的问题,如果尝试这么做,则会碰到"停机问题":不可能写出一个程序,用它
来判断作为其输入而读入的某个程序在执行时是否会停机。一个程序是否会停机被认为是程序的不可预测特征

第四次检查所引用的对象是否在内容存在:符号引用的验证

1.装载:查找并装载类型的二进制数据
2.连接:执行验证,确保被导入的数据的准确性  准备:为类变量分配内存,并初始化为默认值,解析:把类型中的符合转换为直接引用
3.初始化:把类变量初始化为正确的初始值


二进制兼容:
 对于两个类,一个类引用到另外一个类的方法。如果只是方法的内部改变了。。则此类不会重新编译。如果是方法的接口改变了。则会引用重新编译


JVM沙箱实现:
 1。对于一个类的加载过程,类加载器先从自己的父亲加载器中获取,以此循环直到最底层的启动类加载器。如果父亲类加载器返回为空。则在自身中尝试加载寻找。
 不同层次的类加载器所加载的类对应有不同的权限。
 2。又有。对于一个类加载成功后。都有多个策略文件以确定此类可以得到的权限.
  3.
  对于的MS的ActiveX的策略是要么全部通过,要么全部不通过。
 同样还没有解决的问题:
   不断分配内存直至内存耗尽
   不断生成线程导致每个事件处理都很慢 DOS
 JINI:
 查找服务组







分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics