JAVA虚拟机的组成>从零开始学java系列
JAVA虚拟机的组成
什么是虚拟机?
虚拟机是运行在隔离环境下的完整的计算机系统,JAVA虚拟机对字节码进行解释、生成对应的机器码并进行执行。是JAVA跨平台的原因。
JAVA虚拟机的组成部分
- 堆区
- 方法区(永久代)
- 虚拟机栈
- 本地方法栈
- 程序计数器
堆区(堆内存)
堆内存由于是垃圾回收的主要区域,也被称之为GC堆,其主要是用于存放对象实例,这块区域被所有的线程共享,堆内存还细分为以下区域
- 新生代(存活区Survivor)
1.1 Eden区,用于存放新创建的对象,当满了的时候会进行 minor GC。当进行了minor GC后,存活下来的对象(还有引用指向的对象)会被放到该from区。
1.2 from区,用于存放经过了minor GC后还存活的对象实例,每经过一次minor GC年龄都会加1。并且每次进行minor GC时,都会通过对象实例的年龄来判断其去向,年龄到达了老年代的标准(默认15岁)会被放到老年代中,未到年龄会被复制到to区(这个时候to区就会变成新的from区),不可达对象会被回收。
1.3 to区,用于存放经过了minor GC后还存活的对象实例,与from的作用一致
提示:from区与to区总是有一个区是空的 - 老年代
存放from区放进来的对象实例,老年代满了后会进行Major GC(清除老年代) 或者Full GC(全量回收,会将新生代的一起回收) - 永久代(方法区)(元空间)
用于存储已被JAVA虚拟机加载的类信息、常量、静态变量、静态方法等...不会进行垃圾回收
方法区
在JDK1.8之前叫做方法区
在JDK1.8之后删除了方法区,改名为了元空间
虚拟机栈
用于存放对象的引用、基本数据类型、基本数据类型的值、局部变量。以及从堆内存中加载方法进虚拟机栈进行运行。
本地方法栈
使用Native本地方法服务
程序计数器
每个线程都会有一个独立的程序计数器,可以理解为记录线程执行字节码文件的行数
字符串常量池
JDK6及其以前,字符串常量池存放在堆区的永久代中
JDK7之后,字符串常量池存放在普通的堆内存中
JAVA虚拟机的组成>从零开始学java系列的更多相关文章
- 从零开始学 Java - 我放弃了 .NET ?
这不是一篇引起战争的文章 毫无疑问,我之前是一名在微软温暖怀抱下干了近三年的 .NET 开发者,为什么要牛(sha)X一样去搞 Java 呢?因为我喜欢 iOS 阿!哈哈,开个玩笑.其实,开始学 Ja ...
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)
你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)
硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)
从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...
- 从零开始学 Java - 利用 Nginx 负载均衡实现 Web 服务器更新不影响访问
还记得那些美妙的夜晚吗 你洗洗打算看一个小电影就睡了,这个时候突然想起来今天晚上是服务器更新的日子,你要在凌晨时分去把最新的代码更新到服务器,以保证明天大家一觉醒来打开网站,发现昨天的 Bug 都不见 ...
- 从零开始学 Java - log4j 项目中的详细配置
你还会用笔来写字么 我是不怎么会了,有时候老是拿起笔之后不知道这个字怎么写,这时候就会拿起手机去打出来:有时候还会写出来这个字之后越看越不像,这时候就开始怀疑自己的能力了:有时候写出来了一大堆字之后, ...
- 从零开始学 Java - Spring 支持 CORS 请求踩的坑
谁没掉进过几个大坑 记得好久之前,总能时不时在某个地方看到一些标语,往往都是上面一个伟人的头像,然后不管是不是他说的话,下面总是有看起来很政治正确且没卵用的屁话,我活到目前为止,最令我笑的肚子痛得是下 ...
- 从零开始学 Java - Spring MVC 实现跨域资源 CORS 请求
论职业的重要性 问:为什么所有家长都希望自己的孩子成为公务员? 答:体面.有权.有钱又悠闲. 问:为什么所有家长都希望自己的孩子成为律师或医生? 答:体面.有钱.有技能. 问:为什么所有家长都不怎么知 ...
随机推荐
- 玩转STM32MP157- 使用fbtft驱动 lcd st7735r
什么是fbtft fbtft 在 github 中的介绍是" Linux Framebuffer drivers for small TFT LCD display modules,翻译过来 ...
- Jenkins用户权限管理-Role-based Authorization Strategy插件
02-Jenkins用户权限管理-Role-based Authorization Strategy插件 在jenkins的使用过程中,需要给用户分配只管理特定项目的权限来保证项目相关人员只能管理对应 ...
- 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权
一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...
- excel替换函数substitute
1.substitute(需要执行替换操作的单元格区域,旧文本,新文本,第N个旧内容) 例:substitute(A1,"a","b",2) A1=aab ...
- excel VBA使用教程
1.选择文件--选项 2.选择自定义功能区--开发工具的√勾上
- 聊一聊Unity协程背后的实现原理
Unity开发不可避免的要用到协程(Coroutine),协程同步代码做异步任务的特性使程序员摆脱了曾经异步操作加回调的编码方式,使代码逻辑更加连贯易读.然而在惊讶于协程的好用与神奇的同时,因为不清楚 ...
- js 实时监听滚动条状态 判断滚动条位置
var scrollFunc = function (e) { e = e || window.event; var t = document.documentElement.scrollT ...
- UI自动化学习笔记- Selenium元素定位及元素操作
一.元素定位 1. 如何进行元素定位? 元素定位就是通过元素的信息或元素层级结构来定位元素的 2.定位工具 浏览器开发者工具 3.元素定位方式 Selenium提供了八种定位元素方式 id name ...
- 【问答分享第一弹】MySQL锁总结:MySQL行锁、表锁、排他锁、共享锁的特点
大家好,我是小于哥哈.前几天能分享了第一期面试题,MySQL 中有哪几种锁 和 这些锁各有哪些特点 ,这道面试题是经常会被问到的一个面试题,大家反馈的都挺不错的.今天特此来总结一下. 首发于公众号[终 ...
- Docker:docker国内镜像加速
创建或修改 /etc/docker/daemon.json 文件,修改为如下形式 { "registry-mirrors": [ "https://registry.do ...