在一些高并发的程序,或者一些大量使用内存来进行计算的程序,有时候常常会遇到一些这样的问题:程序刚开始运行挺快的,后来就运行缓慢下来了,甚至于到了一定时间还会出现OOM或者StackOverFlow等错误。要理解这些错误产生的根源,就要了解JVM是何如划分、管理、回收内存的,本..
分类:
编程语言 时间:
2016-04-11 07:30:37
阅读次数:
177
[原]java gc与heap内存简述 2014-7-9阅读72?评论0 java内存结构和gc算法有很多种,二者也是互相决定的;使用不同的gc算法的jvm会有不同的内存结构。这里就简单整理下常见的sun jvm内存结构和回收算法。 一、jav...
分类:
其他好文 时间:
2015-11-17 19:34:11
阅读次数:
171
概述 网上关于该题目的文章已经很多,我觉得把它们几个关联起来讲可能更好理解一下。与其它语言一样,它在执行我们写的程序前要先分配内存空间,以便于存放代码、数据;程序的执行过程其实依然是代码的执行及数据的读写过程;除了在执行我们写的显式的可见代码外,Jvm还会自动帮我们帮一些事,包括类的加载、初始化、G...
分类:
编程语言 时间:
2015-10-28 12:37:03
阅读次数:
220
JAVA虚拟机内存JAVA虚拟机内存,也叫JAVA内存,可以理解为Java虚拟机运行时数据区。JVM内存结构包括: 线程共享的方法区 和 堆, 以及每个线程私有的 JAVA栈,本地方法栈 和 PC计数器(程序计数器)。JAVA堆堆,是JAVA虚拟机中所管理的内存中最大的一块,此内存区域的唯一目的就是...
分类:
编程语言 时间:
2015-10-15 22:08:43
阅读次数:
264
java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下:
其中方法区和堆是由所有线程共享的数据区。
Java虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区。
(1).程序计数器:
是一块较小的内存空间,其作用可以看作是当前线程所执行的字节码的行号指示器,字节码解析器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令。程...
分类:
编程语言 时间:
2015-08-20 01:34:28
阅读次数:
155
JVM为了方便管理内存空间,充分使用内存空间,把使用到的内存空间,分为以下几块区域,每块区域只存放特定的信息
堆:
存放信息:所有的对象和数组
这块内存区域又分为新生代、老年代。新生代用于存放刚产生的新对象,老年代存放年长的对象,多次GC都没有被回收的对象。新生代又分为三块区域:Eden:刚产出的对象,S0 1:至少经过一次GC活下的对象。之所以这样区分的目的...
分类:
编程语言 时间:
2015-08-07 19:49:04
阅读次数:
162
一、Java内存分配1. Java有几种存储区域?寄存器 --在CPU内部,开发人员不能通过代码来控制寄存器的分配,有编译器来管理。堆 --在windows下,栈是向底地址扩展的数据结构,是一块连续的内存的区域,即栈顶的地址和栈的最大容量是系统预先定好的。 --优点:由系统自动分配,速度较快。...
分类:
编程语言 时间:
2015-03-19 21:40:17
阅读次数:
188
a) 运行。main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,java程序也可以标明自己创建的线程是守护线程
b) 消亡。当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退...
分类:
编程语言 时间:
2014-08-07 13:07:10
阅读次数:
262
一、JVM是Java Virtual Machine(Java虚拟机)的缩写,不同平台上的JVM都是不同的,但向编译器提供相同的接口,编译器面向JVM生成JVM可以理解的.class字节码文件,对应平台的JVM对.class文件进行解释执行生成与该平台对应的机器码,JVM屏蔽了与具体操作系统平台相关的信息,在java跨平台实现中起到转换器的作用。
二、Java虚拟机包括一...
分类:
编程语言 时间:
2014-05-06 22:34:22
阅读次数:
399