最近在看< JAVA并发编程实践 >这本书,里面涉及到了 Java 内存模型,通过 Java 内存模型顺理成章的来到的 JVM 内存结构,关于 JVM 内存结构的认知还停留在上大学那会的课堂上,一直没有系统的学习这一块的知识,所以这一次我把< 深入理解Java虚拟机JVM高级特性与最佳实践 >.< Java虚拟机规范 Java SE 8版 >这两本书中关于 JVM 内存结构的部分都看了一遍,算是对 JVM 内存结构有了新的认识.JVM 内存结构是指:Java 虚拟机定义…
主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一.JVM启动流程: JVM启动时,是由java命令/javaw命令来启动的. 二.JVM基本结构: JVM基本结构图: <深入理解Java虚拟机(第二版)>中的描述是下面这个样子的: Java中的内存分配: Java程序在运行时,需要在内存中的分配空间.为了提高运算效率,就对数据进行了不同空间的划分,因为每一片区域都有特定的处理数据方式和内存管理方式. 具体划分为如下5个内存空间:(非常重要) 栈:存放局部变量…
JVM学习01:内存结构 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. 内存结构知识要点Xmind梳理 案例分析 分析1 package com.hs.jvm; public class JVMTest1 { public static void main(String[] args){ /** * intger1 和 intger2都是Integer的引用,线程运行时位于虚拟机栈中新建的栈帧中 * 该引用持有指向堆中的Integer实例的引用,而两实例…
知其然,不知其所以然 !在技术的海洋里,前路漫漫,我一直在迷失着自我. 欢迎访问我的csdn博客,我们一同成长! "不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!" 博客首页:http://blog.csdn.net/u010648555 在下面的题目来自于我要加的一个QQ群,然后要加这个QQ群,首先要通过进阶考核,也就是下面这些题,当我看到这些题目的时候.发现这些题目很常见,但是细细去研究,发现每一个问题的知识点都是特别的多也比较深奥! 1,什么是线程安全 (参考书:ht…
今天刷牛客网的题时,看到了两位大神关于JVM内存分析的讲解,就顺手记录学习一下. JVM内存模型图 方法区域存放了所加载的类的信息(名称.修饰符等).类中的静态变量.类中定义为final类型的常量.类中的Field信息.类中的方法信息,当开发人员在程序中通过Class对象中的getName.isInterface等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息…
写这篇的主要原因呢,就是为了能在简历上写个"熟悉JVM底层结构",另一个原因就是能让读我文章的大家也写上这句话,真是个助人为乐的帅小伙....嗯,不单单只是面向面试学习哈,更重要的是构建自己的 JVM 知识体系,Javaer 们技术栈要有广度,但是 JVM 的掌握必须有深度 点赞+收藏 就学会系列,文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱,笔记自取 直击面试 反正我是带着这些问题往下读的 说一下 JVM 运行时数据区吧,都有哪些区?分别是干什么的?…
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域的用途各不相同,同时也依据着各自的执行规则,独立的创建和销毁数据. 虚拟机内存的划分,如图所示: 线程之间互相独立的区域有: 虚拟机栈 .本地方法栈.程序计数器 线程可以共享数据的区域: 方法区 .堆 每个区域的作用分别如下: 程序计数器 Program Counter Register: 众所周知,虚拟机处理多线程时,是通过轮流的切换线程,来获取cpu的执行机会的.在虚拟机执行程序的过程中,当线程执行…
一.运行时数据区域 线程私有的:程序计数器+虚拟机栈+本地方法栈 线程共享的:堆+方法区(运行时常量池)+直接内存(非运行时数据区的一部分) *JDK1.8后将方法区废除,新增元空间. 1.1 程序计数器 记录指令的偏移地址,是唯一一个不会出现OutOfMemoryError的内存区域. 思考:为什么不会出现OutOfMemoryError? OutOfMemoryError出现原因是由于运行时内存动态扩增导致内存不够用,而程序计数器是当执行到下一条指令的时候,改变的只是程序计数器中保存的地址,…
JVM 内存结构 Java 虚拟机的内存空间分为 5 个部分: 程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区 JDK 1.8 同 JDK 1.7 比,最大的差别就是:元数据区取代了永久代.元空间的本质和永久代类似,都是对 JVM 规范中方法区的实现.不过元空间与永久代之间最大的区别在于:元数据空间并不在虚拟机中,而是使用本地内存. 程序计数器(PC 寄存器) 程序计数器的定义 程序计数器是一块较小的内存空间,是当前线程正在执行的那条字节码指令的地址.若当前线程正在执行的是一个本地方法,…
初学者记住一点,学习Java一定是连续性的且循序渐进的“系统化”学习,首先我给你提供一个优秀Java工程师的学习路线. web前端方面:html.css,Java.jQuery.xml解析.Bootstrap Java基础:Javase(Java语法.数组.面向对象.Java常用类.异常处理.集合框架.IO.多线程.网络编程.反射机制.) 数据库:MySQL.Oracle.JDBC Javaweb:Tomcat.Jsp.servlet.ajax 企业级框架:Struts2+Spring+Hibe…