本地方法栈线程公有_Java运行时区域,哪些区域是线程私有的?哪些是共有的?...

JVM 运行时数据区域大致可以分为:程序计数器、虚拟机栈、本地方法栈、堆区、元空间、运行时常量池、直接内存等区域;就是下面这个样子的:

其中有些区域,随着 JDK 版本的升级不断调整,例如:

JDK 1.6,字符串常量池位于永久代的运行时常量池中;JDK 1.7,字符串常量池从永久代剥离,放入了堆中;JDK 1.8,元空间取代了永久代,并且放入了本地内存(Native memory)中。以上几个区域,按照线程公有还是私有可分为:

线程隔离:程序计数器、虚拟机栈、本地方法栈;线程公有:其它的都是线程共享的区域。线程私有

1. 程序计数器

一个 CPU 在某个时间点,只能做一件事情,在多线程的情况下,CPU 运行时间被划分成若干个时间片,分配给各个线程执行;

程序计数器的作用就是记录当前线程执行的位置,当线程被切换回来的时候,能够找到该线程上次运行到哪儿了;所以程序计数器一定是线程隔离的。

2. 虚拟机栈和本地方法栈

虚拟机栈:每个 Java 方法在执行的同时,会创建一个栈帧,用于存储局部变量表、操作数栈、常量池引用等信息;方法的调用过程,就是一个栈帧在 Java 虚拟机栈中入栈和出栈的过程;本地方法栈:和虚拟机栈很类似,区别在于虚拟机栈为 Java 方法服务,本地方法栈为 Native 方法服务;其中 Native 方法可以看做用其它语言(C、C++ 或汇编语言等)编写的方法;HotSpot 虚拟机就选择了将虚拟机栈和本地方法栈合并在了一起;为了保证线程中的局部变量不被别的线程访问到,所以虚拟机栈和本地方法栈是线程隔离的。

线程公有

1. 堆区

对于堆栈的区别总结一句话:堆中存对象,栈中存基本数据类型和堆中对象的引用;一个对象的大小是可以动态变化的,而引用是固定大小的。

这么看就容易理解堆为什么是线程公有的了,省地儿啊。

2. 元空间区/方法区

方法区用于存放已被加载的类信息、常量、静态变量、即编译器编译后的代码等。

还有要注意的一点:方法区是 JVM 的规范,在 JDK 1.8 之前,方法区的实现是永久代;从 JDK 1.8 开始 JVM 移除了永久代,使用本地内存来存储元数据并称之为:元空间(Metaspace)。

3. 运行时常量池

Class 文件中的常量池,会在类加载后被放入这个区域。

另外在 JDK 1.7 之前,字符串常量池就在运行时常量池中,后来字符串常量池放入了堆中,而运行时常量池仍然在方法区(元空间区)中。

有兴趣的朋友可以自己测试一下,以死循环方式创建字符串常量,JDK 1.6 会报永久代 OOM ;JDK 1.7 会报堆区 OOM 。

4. 直接内存

也叫做堆外内存,并不是虚拟机运行时数据区的一部分,也不是Java 虚拟机规范中定义的内存区域。

JDK 1.4 加入的 NIO 类,引入了一种基于通道 ( Channel ) 与缓冲区 ( Buffer ) 的 I/O 方式,它可以使用 native 函数库直接分配堆外内存,然后通过堆上的DirectByteBuffer对象对这块内存进行引用和操作。

简单来说,直接内存就是 JVM 内存之外有一块内存区域,我们通过堆上的一个对象可以操作它;具体等讲到 NIO 部分的时候,再回来加深理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab wc wp,数字信号处理MATLAB习题.PDF

数字信号处理MATLAB习题数字信号处理MATLAB 习题电气硕 72 李弘昌第11 题分别用脉冲响应不变法和双线性变换法设计一个巴特沃斯型IIR 低通数字滤波器,采样频率 ,其通带边频 处的衰减为 ,阻带边频 处的衰减为 。给出设计该滤波器的MATLAB 程序…

开源JVM Sampling Profiler

众所周知 ,大多数现有的采样Java Profiler都必须在安全的地方进行堆栈跟踪收集。 诸如采样探查器之类的探查器就是这种情况,它使用SUN / Oracle管理代理来收集其堆栈跟踪。 这种方法的问题在于,由于不是程序中的每个点都不是安全点&#xff0…

Solidity中的基本类型转换

Solidity中的基本类型转换(十四)|入门系列 2017/4/29 posted in Solidity入门系列 点击查看原文,获得优化的排版。 隐式转换 如果一个运算符能支持不同类型。编译器会隐式的尝试将一个操作数的类型,转为另一个操作数的类型&#x…

雷霆战机

前言 多年前,你我在一起"打飞机"。为了实现真正的打飞机,在下一年前踏足帝都学习了无所不能的Python,辣么接下来带你在俩个小时用200行代码学会打飞机。 python中提供了一个pygame的模块能够让我们快速编写一个游戏。接下来&#x…

FancyBox - 经典的 jQuery Lightbox 插件

FancyBox 是一款非常优秀的弹窗插件,能够为图片、HTML 内容和其它任务的多媒体内容提供优雅的弹出缩放效果。作为是最流行的 Lightbox 插件之一,可以通过 fitToView 实现自适应功能。主要特色: ✓ 能够显示图片、HTML 元素、SWF 影片、ifra…

edger多组差异性分析_简单使用DESeq2/EdgeR做差异分析

DESeq2和EdgeR都可用于做基因差异表达分析,主要也是用于RNA-Seq数据,同样也可以处理类似的ChIP-Seq,shRNA以及质谱数据。这两个都属于R包,其相同点在于都是对count data数据进行处理,都是基于负二项分布模型。因此会发现&#xff…

php如何表格中的变为超链接,php中将网址转换为超链接的函数

php中将网址转换为超链接的函数复制代码 代码如下:function showtext($text){$search array(|(http://[^ ])|, |(https://[^ ])|, |(www.[^ ])|);$replace array($1, $1, $1);$text preg_replace($search, $replace, $text);return $text;}时间: 2011-08-311.根据…

Java面试参考指南–第1部分

JAVA面向对象的概念 Java基于面向对象的概念,它允许更高级别的抽象以实际方式解决任何问题。 面向对象的方法将实际对象中的问题解决方案概念化,从而更易于在整个应用程序中重用。 例如椅子,风扇,狗,电脑等。 在Java…

6.5 开始进入设计 … Transition to Design

开始进入设计 … Transition to Design  从需求分析到设计  逻辑架构与子系统 Logical Architecture and sub-system 5.1 向设计过程切换 Transition to Design  需求与领域分析阶段During requirements and domain analysis work  做正确的事情 “Do the right thing”…

搜索引擎优化系统知名乐云seo_seo技术出名 乐云seo:如何进行搜索引擎优化?

搜索引擎提升是如何进行的?成都seo发现现如今的搜索引擎都存在很多 的网站 以及內容,SEOer平时进行网站提升的状况下全是感受到这一点,要想在众多的网站內容中找寻本身要想的是没法的,因而搜索引擎会进行一定的提升,搜索引擎本身…

Odyssey.js – 使用现成模板在线创建互动的故事

Odyssey.js 是一个开源工具,它可以让你的地图,叙述和其他多媒体结合成一个美丽的故事。创建新的故事很简单,要求无非是一个现代的 Web 浏览器和一个好的想法。你可以使用现成的模板来控制和设计精美的布局,让你的故事的整体外观和…

100层楼扔两个鸡蛋的问题

转载自:http://blog.sina.com.cn/s/blog_6c813dbd0101bh98.html 两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。 有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置…

Matlab看跌期权二叉树,欧式期权二叉树MATLAB程序

欧式期权二叉树MATLAB程序function EXS()Sinput(请输入当前股价:\n);Kinput(请输入股票执行价格:\n);rinput(请输入无风险利率:\n);thetainput(请输入波动率:\n);Tinput(请输入到期时间:\n);bcinput(请输入步长&#x…

Java 8 Friday Goodies:Lambda和SQL

在 Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢 jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经 写了一些关于Java 8好东西的博客 ,现在我们觉得是时候开始一个新的博客系…

酷毙了!三种风格的全屏幻灯片效果【附源码下载】

今天,我们想向您展示如何创建平铺背景图像的幻灯片效果。其灵感来自于国外的一个工作室网站(围观),这个网站充满了各种有趣和创意效果,一定记得去看看。 这个幻灯片效果是由四个区域的独立移动构成,通过画面…

VMware卸载有残留,再安装时报错提示MSI Failed

引用自吾爱破解论坛:https://www.52pojie.cn/thread-455779-1-1.html 解决方法:软件自动清理法; 软件 地址:下载地址1:链接:http://pan.baidu.com/s/1ntzAR7j 密码:a8ug备用:http://…

基本函数依赖和候选键_[总结]关系数据库设计基础(函数依赖、无损连接性、保持函数依赖、范式、……)...

联系(Relationship)1:1联系:如果实体集E1中的每个实体最多只能和实体集E2中一个实体有联系,反之亦然,那么实体集E1对E2的联系成为一对一联系,记为1:1;1:N联系:一对多,记为1&#xff…

使用Mockito模拟自动装配的字段

依赖注入是诸如Spring和EJB之类的Control容器反转的非常强大的功能。 将注入的值封装到私有字段中总是一个好主意。 但是,自动连线字段的封装会降低可测试性。 我喜欢Mockito解决此问题以模拟自动装配字段的方式。 将在示例中进行解释。 (此博客文章希望…

西游之路——python全栈——CRM项目之表结构设计

一、表结构设计 1 from django.db import models2 from django.contrib.auth.models import User3 4 """自带验证"""5 class UserProFile(models.Model):6 """用户信息表"""7 user models.OneToOneField…

你见过吗?9款超炫的复选框(Checkbox)效果

复选框(Checkbox)在各个浏览器中的效果不一致,因此很多 Web 开发人员会自己重新设计一套界面和使用体验都更佳的复选框功能。下面就给大家分享9款超炫的复选框(Checkbox)效果,纯 CSS3 实现,未使…