java内存划分

Java能被广泛使用,很重要的就是GC(Garbage Collection,垃圾回收)机制,也是Java与C/C++的主要区别之一。GC机制带来的好处就是不需要我们过多地关注内存泄漏导致的OOM,但是这并不意味着Java开发就不会有内存泄漏,另外在某些情况下GC也会影响程序运行效率,极端情况下导致“整个世界都静止了”。

Java的GC,设计到内存管理。Java的内存区域分

1.程序计数器(Program Counter Register)区

这个区域比较小,记录当前java线程字节码执行到的位置。它是线程私有(一个线程关联一个程序计数器).

2.虚拟机栈(JVM Stack)区

先进后出的数据区,存储Java的局部变量,操作数,方法出口等,也是线程私有

3.本地方法栈(Native Method Stack)区

也就是执行本地代码时用到的栈,线程私有

4.堆(Heap)区

Java GC的最重要的区域,这里是Java对象实例数据生成和销毁的地方,属于所有线程

5.方法区(Method Area)

用于存储已经被虚拟机加载的类信息(即加载类时需要加载的信息,包括版本、field、方法、接口等信息)、final常量、静态变量、编译器即时编译的代码等。属于所有线程

时间: 2024-08-08 06:03:55

java内存划分的相关文章

Java内存数据模型

本篇文章带来的是对Java内存数据模型的介绍,这对于我们深入理解Jvm虚拟机工作的原理和Java内存的划分大有裨益,好了,为了让我们理解的更为深刻,我们将会加入图片辅助的方法去理解. 本篇博文的目录: 一:Java内存数据模型的介绍 二:线程私有内存 三:程序计数器 四:Java虚拟机栈 五:本地方法栈 六:Java堆 七:方法区 八:运行时常量池 九:总结 一:java内存数据模型的介绍 java程序在运行的时候会在内存中开辟不同的空间用以管理不用的内存区域,每个区域都有自己的功能,创建和销毁

Java内存区域划分和GC机制

Java 内存区域和GC机制 目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢.这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制.概括地说,该机制对 JVM

Java 内存区域划分

        JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分.在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程:                                       如上图所示,首先Java源代码文件(.jav

深入理解Java虚拟机 - 虚拟机内存划分

在内存管理方面,Java相对于C和C++的区别在于Java具有内存动态分配以及垃圾收集技术,但平时我们很少去关注JVM的内存结构以及GC,在出现内存泄露或溢出方面的问题,排查工作将变得异常艰难. 1. 运行时数据区域 Java虚拟机在执行Java程序时会将其管理的内存按照用于划分为若干个不同的数据区域,这些区域有着各自不同的生命周期.根据<JAVA虚拟机规范>,Java虚拟机管理的内存会包含以下几个区域.其中可以分为共享内存区以及线程隔离数据区两个部分. 2. 程序计数器 程序计数器是一个非常

Java内存区域的划分和异常

Java内存区域的划分和异常 运行时数据区域 JVM在运行Java程序时候会将内存划分为若干个不同的数据区域. 打开百度App,看更多美图 程序计数器 线程私有.可看作是当前线程所执行的字节码的行号指示器,字节码解释器的工作是通过改变这个计数值来读取下一条要执行的字节码指令. 多线程是通过线程轮流切换并分配处理器执行时间来实现的,任何一个时刻,一个内核只能执行一条线程中的指令.为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器.这就是一开始说的"线程私有".如果线

数组和Java内存的划分

array:数组 1.概念:一种可以保存多个数据值的容器. 2.特点:1.数组是引用数据类型 2.数组当中的多个数据类型必须统一 3.数组的长度在程序运行期间不可改变.     3.数组的初始化:在内存中创建一个数组,并赋予一些默认值. 1.动态初始化(指定长度): 格式:数据类型[]数组名称 = new 数据类型[数组长度] 解析:左侧的数据类型:数组里保存的数据的统一数据类型 左侧的中括号:表示一个数组 右侧的new:表示创建一个数组 右侧的数据类型要与左侧保持一致 右侧的中括号里必须写数组

Java运行时环境---内存划分

背景:听说Java运行时环境的内存划分是挺进BAT的必经之路. 内存划分: Java程序内存的划分是交由JVM执行的,而不像C语言那样需要程序员自己买单(C语言需要程序员为每一个new操作去配对delete/free代码),放权给JVM虚拟机处理有利也有弊,好处是不容易出现内存泄漏和内存溢出问题,坏处就是自己的屁股不能自己擦,万一有一天JVM罢工不释放了,还是自个忘了释放,So了解虚拟机容易引起内存泄漏和溢出的场景对Java程序员来说还是必不可少的.[内存泄漏:Out Of Memmory,系统

java虚拟机内存划分

java虚拟机内存区域 参照官方文档 1.8版本 Oracle虚拟机内存划分文档 : https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5 The Java Virtual Machine defines various run-time data areas that are used during execution of a program. Some of these data areas are

Java虚拟机的内存划分

内存概述 内存是计算机中的重要原件,临时存储区域,作用是运行程序.我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存.Java虚拟机要运行程序,必须要对内存进行空间的分配和管理.. Java虚拟机的内存划分 为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式 JVM的内存划分: 栈: 存储局部变量 堆:存储new出来的数组或对象 一个数组内存图 原文地址:https://www.cnblogs.