JAVA虚拟机基础

1、引用《thinkinjava》

总结:先由父装载器来寻找引用类,如果没有找到,再由本类的加载器来加载引用类;

eg: 类A,引用了String类,引用了class path目录下的类B; 

               加载类A时,发现引用了String类,先委托父装载器寻找目录类String,即根装载器来装载;

              发现引用了B类,先委托父装载器寻找目录类B,会加载不到,然后从自己的类路径classpath查找并加载目标类B;

2、一台机器部署了2个应用,由于一台机器就一个jdk,一个jdk就一个jvm;findLoadedClass(name)从自己的内存区域找相应的class

 

3、下面的说明还不是很明白??

 

4、由于所有线程都共享方法区,因此它们对方法区数据的访问必须被设计为是线程安全的

5、方法区内容:
   5.1、类型信息,全路径;
   5.2、该类型的常量池:包括直接常量(string,integer和floating point常量)和对其他类型、字段和方法的符号引用;
   5.3、字段信息:字段名,字段的类型,字段的修饰符
   5.4、方法信息:方法名,方法的返回类型,方法参数的数量和类型,方法的修饰符
   5.5、静态变量:虚拟机在使用某个类之前,必须在方法区中为这些类变量分配空间。
   5.6、指向ClassLoader类的应用:
   5.7、指向Class类的引用:虚拟机都会相应地位它创建一个java.lang.Class类的实例,而且虚拟机还必须以某种方式吧这个实例和存储在方法区中的数据关联起来
   5.8、方法表:虚拟机对每个装载的非抽象类,都生成一个方法表,把它作为类信息的一部分保存在方法区。方法表是一个数组,他的元素是所有他的实例可能被调用的实例方法的直接引用,包括哪些从超类继承过来的实例方法。

参照http://boy00fly.iteye.com/blog/1095263

6、Heap 堆:
   java程序在运行时创建的所有类实例或数组都放在同一个堆中。而一个Java虚拟机实例只存在一个堆内存空间,因此所有的线程均共享这个堆。又由于一个java程序独占一个Java虚拟机实例,因而每个java程序都有他自己的堆内存----他们之间不会相互影响。但是同一个Java程序的多线程却共享着同一个堆空间,在这种情况下,就得考虑多线程访问对象(堆数据)的同步问题了。

   对象的内部表示:java对象中包含的基本数据类型由他所属的类及其所有超类声明的实例变量组成。

1、1台宿主机,对应一个JAVA虚拟机;
     1台机器,部署2个server,1个server 独立享有自己的jvm内存;
     1个server,部署2个应用,2个应用共享同一份jvm内存;

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值