1. 内存模型以及分区,需要详细到每个区放什么。 栈区: 栈分为java虚拟机栈和本地方法栈 重点是Java虚拟机栈,它是线程私有的,生命周期与线程相同。 每个方法执行都会创建一个栈帧,用于存放局部变量表,操作栈,动态链接,方法出口等。每个方法从被调用,直到被执行完。对应着一个栈帧在虚拟机中从入栈到 ...
分类:
其他好文 时间:
2019-06-13 00:32:04
阅读次数:
100
二、垃圾收集 垃圾收集主要是针对堆和方法区进行。 程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。 判断一个对象是否可被回收 1. 引用计数算法 给对象添加一个引用计数器,当对象增加一个引用时计数器加 1, ...
分类:
编程语言 时间:
2019-05-12 15:45:08
阅读次数:
149
由于在Hotspot虚拟机中中不区分虚拟机栈和本地方法栈,因此通过-Xoss修改参数是无效的,可以通过修改-Xss设定。 如果线程请求的栈深度大于虚拟机允许的最大深度,将抛出StackOverflowError异常。 如果虚拟机在扩展栈时无法申请到足够的内存空间,将抛出OutOfMemoryErro ...
分类:
编程语言 时间:
2019-03-29 01:18:04
阅读次数:
190
一:java内存区域 jvm布局: jdk1.6版本JVM布局分为:heap(堆),method(方法区),stack(虚拟机栈),native stack(本地方法栈),程序计数器共五大区域。 其中方法区包含运行时常量池。堆和方法区是线程共享的,虚拟机栈和本地方法栈、程序计数器是随线程而创建的。 ...
分类:
其他好文 时间:
2019-02-08 20:12:08
阅读次数:
135
首先JVM的内存结构包括五大区域: 程序计数器、虚拟机栈、本地方法栈、方法区、堆区。其中程序计数器、虚拟机栈和本地方法栈3个区域随线程启动与销毁, 因此这几个区域的内存分配和回收都具有确定性,不需要过多考虑回收的问题。而Java堆区和方法区则不一样,这部分内存的分配和回收是动态的,正式垃圾回收需要关 ...
分类:
其他好文 时间:
2019-01-06 00:03:59
阅读次数:
200
在JVM中,虚拟机栈和本地方法栈(执行实例方法的内存区)是线程私有的,也就是说每个线程都会维护自己的一块内存区域,所有的变量由该线程专门控制,这称之为线程隔离。只有多线程同时操作一块资源,比如同一个实例对象,静态变量(静态变量在内存中只加载一次,但是静态变量是类级别的,如果多个实例访问该变量会引起并 ...
分类:
编程语言 时间:
2018-10-25 19:29:55
阅读次数:
310
Java 虚拟机的内存模型分为两部分:一部分是线程共享的,包括 Java 堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存。今天我就 Java 虚拟机栈做一些比较浅的探究。
分类:
编程语言 时间:
2018-10-22 21:22:14
阅读次数:
142
Java 虚拟机的内存模型分为两部分:一部分是线程共享的,包括 Java 堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存。今天我就 Java 虚拟机栈做一些比较浅的探究。
熟悉 Java 的同学应该都知道了,JVM 是基于栈的。但是这个“栈” 具体指的是什么?难道就是虚拟机栈?想要回答这个问题我们先要从虚拟机栈的结构谈起。
分类:
编程语言 时间:
2018-10-12 23:40:36
阅读次数:
250
一、垃圾收集的概念 在Java虚拟机运行时数据区中程序计数器、虚拟机栈和本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作,每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,因为方法结束或线程 ...
分类:
其他好文 时间:
2018-09-09 14:57:45
阅读次数:
184
1、最简单的内存溢出 2、虚拟机栈和本地方法栈溢出(-Xss:栈内存容量) 两种异常: 如果线程请求的深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。 如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。 单线程时栈溢出: 多线程 ...
分类:
编程语言 时间:
2018-08-28 20:17:31
阅读次数:
178