码迷,mamicode.com
首页 > 编程语言 > 详细

[java基础] java 虚拟机内存机制

时间:2015-04-29 11:53:24      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:内存   性能优化   线程   虚拟机   

了解java虚拟器内存机制的好处

当我们需要解决一些棘手的问题,比如性能优化,解决OOM异常时,如果我们了解java虚拟机的内存机制,就知道从哪里下手处理这些问题了


如何了解

我从三方面去说明他

进程级别

我们在pc上做一个应用,在手机上做一个app,都是以进程的级别存在的。在进程这个级别中,内存被分配给/分配为 java堆、方法区(含有常量存储区)、各个线程

  • java堆:java堆是GC线程回收内存的区域,他主要是用来存储各种对象
  • 方法区:方法区存储了class在加载之后的信息,如全局变量,方法等
  • 常量存储区:静态变量存储区是包含在方法区之中的,他用来存放各种static final常量,这个内存区是可变的

除了java堆和方法区,其他的内存空间就分配给各个线程了

在这些内存区内都会有可能出现OOM异常的

线程级别

  • 程序计数器:每一个线程都会有一个程序计数器,这个在debug的时候跟踪走到哪一步。程序计数器使用的内存很少,而且这部分是不会产生OOM异常的!
  • java虚拟机栈:顾名思义,java虚拟机栈是以栈的方式存在的,所以他的访问速度要比堆快的多。java虚拟机栈存储的是本地变量,java的基本数据类型,对象类型/array类型存储的是指向java堆的地址
  • native方法栈:native方法栈对应java虚拟机栈存储的是native方法的内容
栈和堆不同之处,栈是会抛出stackOverflowException的,不过也有可能会抛出OOM,但是在实战中,stack的内存超出了内存限制,一般抛出的都是stackOverflowException

其他

  • 直接内存:直接内存是在NIO时会用到,他是为了避免native堆和本地堆来回copy数据,而实现的技术

以上内容,如有错误,请大神们指正

[java基础] java 虚拟机内存机制

标签:内存   性能优化   线程   虚拟机   

原文地址:http://blog.csdn.net/vic_fang/article/details/45361927

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!