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

时间: 2024-08-11 09:49:48

JVM的内存以及工作原理的相关文章

JVM 类加载器的工作原理

Java类加载器的作用就是在运行时加载类.Java类加载器基于三个机制:委托.可见性和单一性.委托机制是指将加载一个类的请求交给父类加载器,如果这个父类加载器不能够找到或者加载这个类,那么再加载它.可见性的原理是子类的加载器可以看见所有的父类加载器加载的类,而父类加载器看不到子类加载器加载的类.单一性原理是指仅加载一个类一次,这是由委托机制确保子类加载器不会再次加载父类加载器加载过的类.正确理解类加载器能够帮你解决NoClassDefFoundError和java.lang.ClassNotFo

Tomcat性能优化及JVM内存工作原理

Java性能优化原则:代码运算性能.内存回收.应用配置(影响Java程序主要原因是垃圾回收,下面会重点介绍这方面) 代码层优化:避免过多循环嵌套.调用和复杂逻辑.   Tomcat调优主要内容如下: 1.增加最大连接数 2.调整工作模式 3.启用gzip压缩 4.调整JVM内存大小 5.作为Web服务器时,与Apache整合或Nginx 6.合理选择垃圾回收算法 7.尽量使用较新JDK版本   生产配置实例: 1 2 3 4 5 6 7 8 9 10 11 12 13 <Connectorpor

Java工作原理:JVM,内存回收及其他

JAVA虚拟机系列文章 http://developer.51cto.com/art/201001/176550.htm Java语言引入了Java虚拟机,具有跨平台运行的功能,能够很好地适应各种Web应用.同时,为了提高Java语言的性能和健壮性,还引入了如垃圾回收机制等新功能,通过这些改进让Java具有其独特的工作原理. 1.Java虚拟机 Java虚拟机(Java Virtual Machine,JVM)是软件模拟的计算机,它可以在任何处理器上(无论是在计算机中还是在其他电子设备中)安全兼

JVM工作原理 - 内存空间

大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) ,   VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Native Method Stack  ( 本地方法栈 ),其中Method Area 和  Heap 是线程共享的  ,VM Stack,Native Method Stack  和Program Counter Register  是非线程共享的.为什

Java内存的原型及工作原理理解

一.java虚拟机内存原型 寄存器:我们在程序中无法控制. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 堆:存放用new产生的数据 静态域:存放在对象中用static定义的静态成员 常量池:存放常量 非RAM存储:硬盘等永久存储空间. 二.常量池(constant pool) 常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据.除了包含代码中所定义的各种基本类型(如int.long等等)和对象型(如String及数组)的常量值(final)

JVM 工作原理

VM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例 4.调用JNIEnv实例装载并处理class类. = GC 基础 ===================== JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中Heap = {Old + NEW = { Eden , from, to } }JV

JVM GC Collector工作原理及优化

JVM 调优主要是调整GC以及一些执行参数: 目标: 堆不要太大,不然单次GC的时间过长导致服务器无法响应的问题 压力测试的时候TPS平稳 尽量避免full GC 检查是否用了并行的垃圾回收器 参数: -server执行,开启优化 采用并行gc collector, -XX:+UseParallelGC +XX:+UseParallelOldGC +XX:+UseConcMarkSweepGC -Xmx不要太大,不然单次gc的过程可能太长,大内存机器可以采用多个实例的方式 -Xms不要太小,不然

JVM初探- 内存分配、GC原理与垃圾收集器

JVM初探- 内存分配.GC原理与垃圾收集器 标签 : JVM JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念上可简单认为new时分配外, 我们着重介绍后面的3个步骤: I. 怎样分配- JVM内存分配策略 对象内存主要分配在新生代Eden区, 如果启用了本地线程分配缓冲, 则优先在TLAB上分配, 少数情况能会直接分配在老年代, 或被拆分成标量类型在栈上分配(JIT优化). 分配的规则并不是百分百固定, 细节主要取

JVM垃圾回收器工作原理及使用实例介绍

垃圾收集基础 Java 语言的一大特点就是可以进行自动垃圾回收处理,而无需开发人员过于关注系统资源,例如内存资源的释放情况.自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担. 拥有垃圾收集器可以说是 Java 语言与 C++语言的一项显著区别.在 C++语言中,程序员必须小心谨慎地处理每一项内存分配,且内存使用完后必须手工释放曾经占用的内存空间.当内存释放不够完全时,即存在分配但永不释放的内存块,就会引起内存泄漏,严重时甚至导致程序瘫痪. 以下列举了垃圾回收器常用的算法及实