谈一谈Java编程开发中虚拟机的内存区域划分?猿们怎么看?

java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,有的区域随虚拟机进程的启动而存在,有的区域则依赖线程而存在。包括以下几个运行时数据区域:

程序计数器(线程私有):

可以看作是当前线程所执行的字节码的行号指示器,通过程序计数器知道当前线程接下来要执行什么指令,比如分支、循环、跳转、异常处理等等;程序计数器的作用是给线程用的,所以它是线程私有的。该内存区域是唯一一个不会抛OutOfMemoryError异常的区域。

java虚拟机栈(线程私有):

用来存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用到执行完成的过程,对应一个栈帧在虚拟机栈中入栈到出栈的过程。局部变量表主要用来存放各种基础数据类型(boolean/byte/char/int/long/double/void/short/float)、java对象引用(注意不是对象本身,对象是存储在堆中的),其中,64位长度的long和double,占用2个局部变量空间(Slot),其它数据类型只占用1个。虚拟机栈是线程私有的,生命周期和线程相同。在这个区域中,如果线程请求的栈深度大于虚拟机允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,拓展时无法申请到足够的内存,就会抛出OutOfMemoryError异常。

本地方法栈(线程私有):

和虚拟机栈相似,本地方法栈服务于native方法。

堆(线程共享):

是线程共享的一块区域,几乎所有的对象和数组都是存储在堆,也是垃圾回收器管理的主要区域,也称为“GC堆”。如果堆中内存不足以完成对象内存分配,就会抛出OutOfMemoryError异常。

方法区(线程共享):

是线程共享的一块区域,用来存放类信息、常量、静态变量、编译后的代码等。

运行时常量池(线程共享):

属于方法区的一部分,具备动态性,可在运行期间动态放入常量池,如String类的intern()方法。

直接内存:

直接内存不属于虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域。NIO类通过Native函数直接分配堆外内存,提高性能。不受java堆大小限制,但是受本机内存限制。

为了让学习变得轻松、高效,今天给大家免费分享一套Java入门教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要入门的资料欢迎加入学习交流群:9285,05736

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

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

相关文章

linux桌面使用网卡设置,Linux的KDE桌面下怎样设置网络连接?

a) 在KDE的“启动程序”菜单,选择“KNOPPIX”—>“Network/Internet”—>点击“ADSL/PPPOE configuration”。b) 配置程序会自动找到您的网卡设备,确认后请选中“yes”并回车。c) 程序自动扫描已安装的ADSL Modem。d) 已找到ADSL Modem&#xff0c…

成为一名成功的程序员要做到以下10点?网友:是真的吗?

编程是一个没有极限的职业,所以要成为一名优秀的程序员,你必须超越现有已存在的极限。在程序员职业生涯的开始阶段,他们将面临许多挑战,面对困境,他们之中有一些人将会放弃,而只有少数人会坚持到底&#xf…

掌握Java编程思想,学好Java只需要三步?网友:真的吗?

Java可谓是热门的编程语言,我们的生活方方面面都离不开Java。想学Java的人也是络绎不绝,那么零基础如何学习Java编程?拥有编程思想呢?小编给你答案。 一、从Java基础开始 找一个Java的基础教程学一下,学习Java基础的时…

linux tar 大小不同,linux – 如何在使用tar时设置bzip2块大小?

export BZIP--fasttar cjf foo.tar.bz2 foo或者将tar的输出传递给bzip2.虽然你应该从bzip2手册页中注意到:-1 (or --fast) to -9 (or --best)Set the block size to 100 k, 200 k .. 900 k when compressing.Has no effect when decompressing. See MEMORY MANAGEME…

10个简单的 Java 性能调优技巧

优化应用程序以获得最佳性能不是一件容易的事情。但是,这并不意味着如果你不具备这些知识,就不能做任何事情。这里有11个易于遵循的建议和最佳实践可以帮助你创建一个性能良好的应用程序。 大部分建议是针对Java的。但也有若干建议是与语言无关的&#…

服务器linux启动,Linux 服务器环境启动

1、PHP关闭phpkillall php-fpmphp重启/usr/local/php/sbin/php-fpm &或者/usr/local/php/sbin/php-fpm {start|stop|quit|restart|reload|logrotate}--start 启动php的fastcgi进程--stop 强制终止php的fastcgi进程--quit 平滑终止php的fastcgi进程--restart 重启php的fastc…

浅谈Spring注解

Spring目前的趋势是使用注解结合Java代码而不是配置来定义行为、属性、功能、规则和扩展点,因此梳理注解也是梳理Spring功能点的很好的方式,全面的梳理可以补足我们知识点的漏洞。 查找所有注解 首先,我们来创建一个项目,使用SP…

linux nginx 状态,Nginx开启运行状态(status)功能 | IT运维网

1、查验Nginx的Status模块,此模块一般安装时都会安装的。2、编辑Nginx主配置文件(/usr/local/nginx/conf/nginx.conf)在默认站点中配置Status功能location /nginx_status #开启Nginx站点运行状态功能并定义状态查看访问位置{stub_status on; #启用状态access_log…

Java 并发编程必须知道的七种锁类型以及应用

锁是解决并发冲突的重要工具。在开发中我们会用到很多类型的锁,每种锁都有其自身的特点和适用范围。 需要深刻理解锁的理念和区别,才能正确、合理地使用锁。 常用锁类型 乐观锁与悲观锁 悲观锁对并发冲突持悲观态度,先取锁后访问数据&…

linux原理与应用期末考试,武汉大学计算机学院2009-2010学年第一学期期末考试《Linux原理与应用》期末考试试卷(共8套,有答案)...

内容简介:Linux 期末考试试题(共8套,有答案)Linux 期末考试试题(一)一、选择题 (每小题2分,共50分)1.在创建Linux分区时,一定要创建( D )两个分区A. FAT/NTFS B. FAT/SWAP C. NTFS/SWAP D.SWAP/根分区2.在Red Hat Linux 9中&#…

linux kvm dhcp配置,《转》QEMU-KVM创建虚拟机自动指定IP的配置

在使用qemu创建虚拟机的过程中是无法指定IP地址的,可是在实际应用中,我们是需要虚拟机拥有IP地址的,并且不是人为去虚拟机操作系统上配置。在qemu虚拟机技术文档(http://qemu.weilnetz.de/qemu-doc.html#pcsys_005fmonitor)里捣鼓了好久&…

谈一谈Java编程开发中的并发控制

并发指在宏观上的同一时间内同时执行多个任务。为了满足这一需求,现代的操作系统都抽象出 线程 的概念,供上层应用使用。 这篇博文不打算详细展开分析,而是对java并发中的概念和工具做一个梳理。 沿着并发模型、并发要解决的问题、基本工具、…

c语言中头文件及其作用,C语言头文件的作用是什么

C语言头文件的作用:1、头文件是程序各部分之间保证信息一致性的桥梁,是连接程序对象定义和使用的纽带;2、用于指定模块接口的声明放在文件中,文件名中应标明其预期用途。本文操作环境:Windows7系统,宏基S40…

Java技术大咖为什么都有写博客的习惯呢?

把自己的设计、思路、总结都写到日记里(我用evernote),便于自己思路的整理,很多时候人脑的缓存是真不够用,后面回来找思路的时候,细节也都在笔记里面。 1.让我思维更清晰,表述更有条理 我生活中…

奥鹏20年12月作业考核(C语言专科),《C语言(专科)》20年12月作业考核【答案100分】...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼《C语言(专科)》20年12月作业考核共20道题 总分:100分100分咨询dddda98咨询dddda98咨询dddda98单选题一、单选题共20题,100分15分请选出可用作C语言用户标识符的一组标识符( )Avoid define WORDBa3_b3 _123 …

Java与C++有何区别呢?请看以下几点就明白了……

Java和C都是面向对象语言。也就是说,它们都能够实现面向对象思想。那两者到底有何区别?由于c为了照顾大量的C语言使用者, 而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA…

零基础学习java必须要了解的学习路线

Java开发目前热火朝天,但是有传言说Java将被取代,当然那只是传言。今天小编来谈谈零基础学习Java必须了解的学习路线。 第一阶段:HTMLCSS 静态布局开始 有人肯能会说我是做后端的,前端的事情不用管,这本身就是一个误区…

linux相关英文书记,Linux常用软件(英文介绍)

Linux常用软件(英文介绍)发布时间:2007-09-27 15:37:36来源:红联作者:wsecurotyFirefoxThe best internet browserAmaroKThe most sophisticated mp3 player for Linuxk3bK3b is a feature-rich and easy to handle CD burning application.ThunderbirdThe best email clientba…

linux openoffice centos,centos8 openoffice安装

安装桌面GUIyum check-updateyum -y install lvm2 device-mapperyum -y groupinstall GNOME1. 首先下载rpm包下载rpm包(官网或者其他网站都可以)但是要注意版本,我建议是4.1.2版本以上,因为以前的版本不支持含有中文的文件名的文档转pdf;我下载的是这个Apache_OpenOffice_4.1.3…

Java开发以及Web 和移动程序员必须了解的10个框架

新的一年已经开始,不知道大家有没有定好小目标。如果2019年还没有决定学什么,那么你来对地方了。在今天的文章中,我将分享一些你可以学习的最好框架,以提升你在移动和Web开发以及大数据技术方面的知识。 在当今世界,对…