一、内存管理 1、运行时的内存区域 线程私有:虚拟机栈、本地方法栈、程序计数器 线程共享:堆、方法区 2、各个内存区域可能抛出的异常 栈 1、当单线程时,栈的深度太大,会发生StackOverflowError,比如无穷的递归调用。 2、当多线程时,若不停地创建线程,则会导致OutOfMemoryE ...
分类:
其他好文 时间:
2017-04-30 18:37:33
阅读次数:
244
在java内存模型中,程序计数器、虚拟机栈、本地方法栈这些区域每个线程独立拥有,与线程“同生共死”。每个栈帧内存大小是确定可知的,方法或线程结束时自动回收,这些区域不需要考虑内存回收问题。这里的垃圾回收指的是jvm堆内存和方法区的回收,这些区域内存在程序运行期间动态分配、动态回收,需要考虑选择合适的 ...
分类:
编程语言 时间:
2017-04-30 18:35:14
阅读次数:
146
运行时数据区包括:虚拟机栈区,堆区,方法区,本地方法栈,程序计数器 虚拟机栈区 :也就是我们常说的栈区,线程私有,存放基本类型,对象的引用和 returnAddress ,在编译期间完成分配。 堆区 , JAVA 堆,也称 GC 堆,所有线程共享,存放对象的实例和数组, JAVA 堆是垃圾收集器管理 ...
分类:
编程语言 时间:
2017-04-29 13:42:26
阅读次数:
157
1.背景 2.为什么废弃永久代(PermGen) 3.深入理解元空间(Metaspace) 4.总结 正文分割线 一、背景 1.1 永久代(PermGen)在哪里? 根据,hotspot jvm结构如下(虚拟机栈和本地方法栈合一起了): 上图引自网络,但有个问题:方法区和heap堆都是线程共享的内存 ...
分类:
Web程序 时间:
2017-04-27 23:18:50
阅读次数:
343
大多数JVM将内存区域划分为MethodArea(Non-Heap)(方法区),Heap(堆),ProgramCounterRegister(程序计数器),VMStack(虚拟机栈,也有翻译成JAVA方法栈的),NativeMethodStack(本地方法栈),其中MethodArea和Heap是线程共享的,VMStack,NativeMethodStack和ProgramCount..
分类:
其他好文 时间:
2017-04-27 19:30:27
阅读次数:
120
目录 1.背景 2.为什么废弃永久代(PermGen) 3.深入理解元空间(Metaspace) 4.总结 正文分割线 一、背景 1.1 永久代(PermGen)在哪里? 根据,hotspot jvm结构如下(虚拟机栈和本地方法栈合一起了): 上图引自网络,但有个问题:方法区和heap堆都是线程共享 ...
分类:
Web程序 时间:
2017-04-27 11:40:58
阅读次数:
312
要了解Java的中常量池,首先要知道jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。 本地方法栈是jvm调用操作系统方法所使用的栈。 虚拟机栈是jvm执行java代码所使用的栈。 方法区存放了一些常量、静态变量、类信息等,可以理解成class文件在内 ...
分类:
编程语言 时间:
2017-04-23 13:16:45
阅读次数:
246
一、为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。 二、哪些内存需要进行垃圾回收 对于虚拟机中线程私有的区域,如程序计数器、虚拟机栈、本地方法栈都不需要进行 ...
分类:
其他好文 时间:
2017-04-21 22:51:21
阅读次数:
239
先贴上一段参数设置 很多时候,将代码部署到服务器,都会对JAVA_OPTS进行一些操作,大多数情况对主要两个知道是干嘛的,其实的哪copy的算哪的。 所以,看了点资料,想写点东西。 Java虚拟机运行时数据区,主要包括以下部分:方法区、堆,它们是线程共用的部分;虚拟机栈、本地方法栈、程序计数器。下面 ...
分类:
编程语言 时间:
2017-04-19 00:25:29
阅读次数:
207
上一篇看了堆内存是怎么创建对象的,那么创建完肯定要使用对象啦~ 那是怎么访问对象呢? java 程序是通过栈上的reference数据来操作堆上的具体对象的。 首先我们回顾一下虚拟机栈: 虚拟机栈是 java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局 ...
分类:
其他好文 时间:
2017-04-17 12:40:13
阅读次数:
141