JVM系列1:内存区域】的更多相关文章

前言 之前我们探讨过一个.class文件是如何被加载到jvm中的.但是jvm内又是如何划分内存的呢?这个内被加载到了那一块内存中?jvm内存划分也是面试当中必被问到的一个面试题. 什么是jvm内存区域划分? 其实这个问题非常简单,JVM在运行我们写好的代码时,他是必须使用多块内存空间的,不同的内存空间用来放不同的数据,然后配合我们写的代码流程,才能让我们的系统运行起来. 举个最简单的例子,比如咱们现在知道了JVM会加载类到内存里来供后续运行,那么我问问大家,这些类加载到内存以后,放到哪儿去了呢?…
JVM之Java内存区域 世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程. 一.JAVA内存区域 谈及JAVA虚拟机运行时数据区域就不得不祭出这张经典的图了: 图1.1 Java虚拟机运行时数据区 Java虚拟机在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域,包括: 线程隔离的数据区 程序计数器 当前线程所执行的字节码的行号指示器: 程序的分支.循环.跳转.异常处理.线程恢复等都依赖于这个计数器: 虚拟机栈 描述Java方法执行的内存…
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,有的区域是线程共享的,有的区域是线程隔离的.如下图: 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时就是通过这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转.异常处理.线程恢复等基础功能都需要依赖这个计数器来完成. 程序计数器是线程私有的内存区域,保证线程切…
作者:梦工厂链接:https://www.jianshu.com/p/7ebbe102c1ae来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来. Java虚拟机在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域.   java虚拟机运行时数据区 一.程序计数器 程序计数器可以看做是当前线程所执行的字节码的行号指示器.在JVM的概念模型里,字…
JVM运行java程序时会将内存划分为若干个不同的数据区域: (1)程序计数器: 1.占用内存空间不大. 2.程序计数器相当于JVM所执行的字节码(jvm指令)的“行号指示器”,通过程序计数器的“值”找到吓一跳需要执行的字节码指令. 3.每一个线程所执行命令的顺序都是独立的,所以每个线程都有一个程序计数器. 4.此内存区域是唯一一个没有规定“OutOfMemoryError”的区域. (2)虚拟机栈: 1.虚拟机栈是一个“栈结构”的内存区域(先进后出).里面存的是一个个“栈帧”. 每一个方法在执…
Java虚拟机运行时数据区分为以下几个部分: 方法区.虚拟机栈.本地方法栈.堆.程序计数器.如下图所示: 一.程序计数器 程序计数器可看作当前线程所执行的字节码行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令.Java虚拟机的多线程是通过线程轮流切换以分配处理执行时间的方式进行的,因而为了确保线程切换后能够恢复到正确的执行位置,每条线程都有一个独立的程序计数器,各个线程计数器独立存储,互不影响,这类内存区域称为"线程私有"内存.当线程执行Java…
本人免费整理了Java高级资料,一共30G,需要自己领取:传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 运行时数据区域 JVM载执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁.具体如下图所示: 程序计数器(Program Counter Register) 程序计数器(Program…
前言 通过学习深入理解java虚拟机的教程,以及自己在网上的查询的资料,做一个对jvm学习过程中的小总结. 本文章内容首先讲解java的内存分布区域,之后讲内存的分配原则以及内存的监控工具.再下来会着重讲解垃圾回收这一章节,该章节涉及了垃圾的标记算法以及各种垃圾回收算法,然后大概的介绍下市面上使用的垃圾收集器.之后就总结下上面的原理,讲解相关的jvm调优案例.然后会着重讲解类加载过程.最后一章讲字节码的部分,字节码相对来说是比较枯燥而且特别繁琐的内容,最好是自己动手配合着学习会好一点,或者观其大…
Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁时间,有些区域随着虚拟机进程的启动而存在,有些区域依赖用户线程的启动和结束而建立和销毁. Java 虚拟机运行时数据区: 程序计数器: 是一块较小的内存空间,可以看做使当前线程所执行字节码的行号,字节码解释器工作时就是通过改变这计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转.异常处理.线程恢复都需要依赖这个计数器. 如果执行的是一个 Java 方法,这个…
1.运行时常量池属于线程共享区中的方法区. 2.运行时常量池用于编译期生成的各种自变量,符号引用,这部分内用将在类加载后接入方法区的运行时常量池中存放. 看如下代码所示,如图: public class Test { public static void main(String[] args) { String s1 = "abc"; String s2 = "abc"; String s3 = new String("abc"); System…