[原创]JVM_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3682 | 回复: 0   主题: [原创]JVM        下一篇 
fangdingyu
注册用户
等级:少校
经验:1238
发帖:55
精华:25
注册:2013-3-6
状态:离线
发送短消息息给fangdingyu 加好友    发送短消息息给fangdingyu 发消息
发表于: IP:您无权察看 2013-3-8 11:33:28 | [全部帖] [楼主帖] 楼主

     虚拟机(JVM),它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.java虚拟机有自己完善的硬件架构,如处理器,堆栈,寄存器等,还具有相应的指令系统.JVM屏蔽了与具体操作系统平台相关的信息,使得java程序只需生成在java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行.java虚拟机在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令来执行.

     常见的JDK内存机制.

Young(年轻代,也叫new区)


     young 可以分为Eden区和两个Survivor区(from 和to,两个Survivor区大小严格一致),新的对象实例总是首先放在eden区,Survivor区作为eden区和Tenure(old)的缓冲,可以向Tenure(old)转移活动的对象实例

Tenured (保持代,也叫old区)


    Tenure中存放生命周期长久的实例对象,但是里面的对象也是会被回收掉的.

     young和Tenured组成了Java的堆内存.

Perm(永久代)


     perm则是非堆内存的组成部分.主要存放加载的class类级别对象如class本身,method,field等.

     在jvm启动时,就已经保留了固定的内存空间给heap内存,这部分内存并不一定都会被JVM使用,但是可以确定的是这部分保留的内存不会被其他进程使用,这部分内存的大小由-Xmx参数指定.

    影响这个的参数是-Xms, 如果-Xms指定的值比-Xmx的小,那么两者的差值就是Virtual内存值.随着内存的运行,Eden区,Tenured区和Perm取会逐渐使用保留的Virtual空间.

     Java的GC原理.

     GC即垃圾回收机制,java开发人员无法使用指针来自由地管理内存,GC是JVM对内存进行管理的方式.GC使得JAVA开发人员摆脱了繁琐的内存管理工作,让程序的开发更有效率.

     jvm中的classloader

     类加载器用来加载java类到java虚拟机中,一般来说,java虚拟机使用java类的方式如下:java源程序(.java文件)在经过java编译器之后就被转换成java字节码文件(.class)。类加载器负责读取java字节代码,并转换成java.lang.Class类的一个实例. 每个这样的实例用来表示一个java类.

     与C和C++编写的程序不同,java程序是由许多独立的类文件组成的,每个文件对应于一个java类. 此外,这些类文件并非立即全部装入内存,而是根据程序需要装入内存的.ClassLoader便是JVM中将类装入内存的那个零件。用户可以定制自己的ClassLoader。JVM中缺省的CLASSLOADER可以完成本地文件装入类文件的任务.用户定制的CLassloader可以拥有JVM缺省的classloader所不具有的功能.例如,用户可以使用自己创建的classloade从非本地

硬盘或者从网络装入可执行代码.

     jvm在运行时会产生三个classLoader,即bootstrap classloader,extension classloader,app classloader.bootstrap classloader使用C++编写,屏幕上打印它时为null.它用来在jvm启动时自动加载核心类库,

    运行过程中不能修改bootstrap 加载路径.  entension classloader用来加载JRE/lib/ext目录下的库文件,jre/classes

目录下的类.app classloader用来加载classpath变量指定路径下的类.三者的层次关系如下.

bootstrap classloader
extension classloader
app classloader


   找不到时用下面的一个




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论