JVM的内存以及工作原理

JVM的内存模型,主要分为五部分

1.程序计数器:内存中的一小块区域,主要用来指示当前线程执行的命令行,线程私有的,唯一一个没有异常的

2.java栈:主要存放局部变量、操作栈、动态链接、方法出口等信息,jvm执行方法的过程就是进栈出栈的过程,可能导致的异常为stackoverflowerror和outOfmemoryeror,线程私有的

3.本地方法栈:和java栈差不多,只不过一个是为java方法服务,而另外的一个是为native 方法服务,线程私有的

4.java堆:存放java对象的实例,也是垃圾回收的主要区域,其中GC堆分为:年轻代和老年代,年轻代又分为:eden、from survivor、to survivor,线程共享的,异常:outOfmemoryeror

5.java区,存放类的信息、静态变量、常量、即时编辑产生的代码。线程共享的,异常:outOfmemoryeror

具体参考:http://www.cnblogs.com/dingyingsi/p/3760447.html

java对象的引用方式:

1.硬引用:平时new出来的队形就是强引用,JVM即使是没有内存也不会去清除

2.软引用:当发生内存溢出的情况下,会清除

3.弱引用:即使内存不溢出,也可能会清除,当时不一定会一定清除

4.虚引用:随时都可能会被清除,它的清除必须要和引用队列一起。

具体参考:http://blog.csdn.net/coding_or_coded/article/details/6603549

垃圾回收机制:

垃圾回收主要有:

1.标记:对需要就行回收的对象进行标记,然后进行回收,优点:每次清理一小块区域,效率高,缺点;产生大量的碎片

2.复制,内存分为两个区域,一个分配对象,一个空闲,分配对象到一个内存区域,清理时,把所有的存活对象放到空闲的区域,另外的区域全部清理,

优点:不会产生磁盘碎片,缺点:效率低,浪费内存

3.标记—复制算法:前两者的结合

年轻带中eden区一般采用复制,而survivor中采用标记-复制,年老代采用标记算法

具体参考:http://www.cnblogs.com/ceshi2016/p/6077871.html

    原文作者:JVM
    原文地址: http://www.cnblogs.com/grows/p/6097067.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞