一、java的体系构成:

Java的技术体系主要由支撑java程序运行的虚拟机、提供各种开发领域接口支持的java api、java编程语言及许多第三方java框架(如Spring 、Struts等)构成。

二、JDK与JRE的区别:

Java程序设计语言,java虚拟机和java API类库这三部分统称为JDK,是用于支持java程序开发的最小环境。

把Java API类库中的java SE API 子集和java虚拟机这两部分统称JRE,JRE是支持java程序运行的标准环境。

三、未来发展:

Java未来的发展方向:模块化、混合语言、多核并行

四、Java内存区域与内存溢出异常

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。

1.Java虚拟机运行时的数据区域

(a)程序计数器

它可以看成是线程所执行的字节码的行号指示器,,工作是通过改变计数器来执行下一个需要执行的字节码指令。线程本质上采用分配时间片的方式来进行执行,所以,为了能够让线程切换后恢复到原来的位置,需要为每一个线程独立分配一个计数器,相互独立,独立存储,这类内存区域称为“线程私有”的内存。

(b)Java虚拟机栈

虚拟机栈描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用到完成的过程,就对应了一个栈帧在虚拟机栈中入栈到出栈的过程。

(c)本地方法栈

本地方法栈与虚拟机栈所发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈是为java方法服务的,而本地方法栈是为虚拟机所使用到的native服务。

(d)Java堆

Java堆是Java虚拟机所管理的内存最大的一块,是被所有线程共享的区域,此内存区域唯一的目的就是存储内存对象的实例,几乎所有的对象实例都存储在这里,所以这里也是垃圾收集器管理的主要区域,对对象实例的回收。

(e)方法区

是各个线程共享的区域,主要存储被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。

2.对象的内存布局

对象头、实例数据和对齐填充

如果使用句柄访问的话,那么Java堆中将会划分出一块内存来作为句柄池,reference中存储的就是对象句柄地址,而句柄中包含了对象实例数据与类型数据各自的具体地址信息。

如果使用直接指针访问,那么java堆对象的布局中就必须考虑如何访问数据类型的相关信息,而reference中存储的直接就是对象地址。

《深入理解Java虚拟机》之(一、内存区域)的更多相关文章

  1. 《深入理解 java 虚拟机》学习 -- 内存分配

    <深入理解 java 虚拟机>学习 -- 内存分配 1. Minor GC 和 Full GC 区别 概念: 新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Java ...

  2. 深入理解Java虚拟机(自动内存管理机制)

    文章首发于公众号:BaronTalk 书籍真的是常读常新,古人说「书读百遍其义自见」还是很有道理的.周志明老师的这本<深入理解 Java 虚拟机>我细读了不下三遍,每一次阅读都有新的收获, ...

  3. 深入理解Java虚拟机之JVM内存布局篇

    内存布局**** ​ JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的稳定高效运行.不同的JVM对于内存的划分方式和管理机制存在部分差异.结合JVM虚拟机规范,一起来 ...

  4. 【深入理解Java虚拟机】自动内存管理机制——内存区域划分

      Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...

  5. Java虚拟机运行时内存区域简析

    figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...

  6. 【深入理解Java虚拟机】自动内存管理机制——垃圾回收机制

      Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...

  7. 深入理解Java虚拟机(一)——JVM内存模型

    文章目录 程序计数器 定义 作用 特点 Java虚拟机栈 定义 特点 本地方法栈 定义 Java堆 定义 特点 方法区 定义 特点 运行常量池 直接内存 总结 Java虚拟机的内存空间分为五个部分: ...

  8. 深入理解JAVA虚拟机原理之内存分配策略(二)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 1.对象优先在Eden分配 大多情况,对象在新生代Eden区分配.当Eden区没 ...

  9. 深入理解java虚拟机(一)虚拟机内存划分

    Java虚拟机在执行Java程序时,会把它管理的内存划分为若干个不同的数据区.这些区域有不同的特性,起不同的作用.它们有各自的创建时间,销毁时间.有的区域随着进程的启动而创建,随着进程结束而销毁,有的 ...

  10. 深入理解java虚拟机---虚拟机工具jconsole(十八)

    Jconsole,Java Monitoring and Management Console. Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到.它用于连接正在运行的本地或者远 ...

随机推荐

  1. Django模板及表查询笔记

    模板层 后端朝html页面传递数据 两种给html页面传递数据的方式 第一种: render(request,'index.html',{'user_list':user_list}) 第二种 ren ...

  2. Mysql错误--Table 'mysql.servers' doesn't exist.

    问题: 今天在初始化数据库的时候,在配置文件里加了"--skip grant tables",登陆进去之后,发现无法修改root密码,报这个错误.   Table 'mysql.s ...

  3. HDU-6170 Two strings

    http://acm.hdu.edu.cn/showproblem.php?pid=6170 . 匹配任意字符,x* 匹配任意长度的 x (x 为任意字符,长度可以为 0 ) 正则表达式 #inclu ...

  4. resful规范: 进行数据交换时的代码潜规则

    目前主流的三种web服务交互方案: REST (Representational State Transfer) 表征性状态转移 SOAP (Simple Object Access Protocol ...

  5. thymeleaf 模板使用 提取公共页面

    切记!!!thymeleaf模板的使用,姿势很重要!!!姿势不对,可能导致样式.js等的使用受到影响 前台开发中,由于页面目录结构不同,可能导致引入的公共页面中的的跳转路径在部分页面能用,部分页面不能 ...

  6. C#连接Oracle数据库的方法

    目前了解C#中连接Oracle数据库的方法有3种,分布是微软的System.Data.OracleClient,Oracle的Oracle.DataAccess.Client和Oracle的Oracl ...

  7. 小程序点击图片,png转jpg,再预览方法

    //页面数据初始化添加参数:isSignCanvassShow //通过canvas将图片转为jpg,使图片生成白色底便于查看预览 //list为原图片数组列表,index表示当前图片下标, //im ...

  8. queryURLParams

    let url = 'http://www.douqu.com/index.html?name1=val1&name2=val2'; //1.提取问号后的字符 let asktext = ur ...

  9. canvas-八卦图和时钟实现

    八卦图: <body> canvas id="></canvas> <script> //获取到画布元素 let myCanvas = docume ...

  10. window上mongoDB的安装及常用mongodb命令

    前几天在学习node操作数据库时使用的mongoDB数据库,今天来对mongodb的安装过程及配置以及后面需要使用的一些常用命令做一下总结. 安装MongoDB (可参考菜鸟教程中的安装步骤) 首先, ...