java编程 内存_Java编程技术之浅析JVM内存

JVM

JVM->Java Virtual Machine:Java虚拟机,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

基本认知:

1.JVM是用于运行Java代码的假象计算机,主要有一套字节码指令集,一组寄存器,一个栈,一个垃圾回收,堆 和 一个存储方法域。

2.JVM运行在操作系统之上,与硬件没有直接的交互。

Java程序执行过程:

1.编译->源文件由编译器编译成字节码[ByteCode] Java 源文件—->编译器—->字节码文件

2.运行->字节码由java虚拟机解释运行字节码文件—->JVM—->机器码

Java类的加载步骤:

1.加载->主要是完成3个阶段的提交:通过类的全限定名来获取定义类的二进制字节流

将字节流所代表的静态存储结构转化为方法区的运行时数据结构

在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。

2.验证->四个阶段的检验动作:文件格式验证

元数据验证

字节码验证

符号引用验证

3.准备->为类变量(static)分配内存并设置类变量的初始值。

4.解析->将常量池内的符号引用转为直接的引用

5.初始化->按照static块和static变量在文件中的出现顺序,合并到()方法中。实例变量由()函数赋值。

JVM线程实体:

JVM线程->程序执行过程中的一个线程实体,JVM 允许一个应用并发执行多个线程。

从此,我们应该意识到,在Java中,当提到线程就应该是指JVM线程和Java线程。其中JVM线程指的是Hotspot JVM 后台运行的系统线程,而且Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。

⚠️[注意事项]:

[1].当线程本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。

[2].Java 线程结束,原生线程随之被回收。操作系统负责调度所有线程,并把它们分配到任何可用的 CPU 上。

[3].当原生线程初始化完毕,就会调用 Java 线程的 run() 方法。当线程结束时,会释放原生线程和 Java 线程的所有资源

特别需要知道的是,Hotspot JVM 后台运行的系统线程主要是:

虚拟机线程->VM thread:等待 JVM 到达安全点操作出现。这些操作必须要在独立的线程里执行,因为当堆修改无法进行时,线程都需要 JVM 位于安全点。这些操作的类型有:stop-theworld垃圾回收、线程栈 dump、线程暂停、线程偏向锁(biased locking)解除。

周期性任务线程->负责定时器事件(也就是中断),用来调度周期性操作的执行

GC线程->支持 JVM 中不同的垃圾回收活动

编译器线程->在运行时将字节码动态编译成本地平台相关的机器码

信号分发线程->程接收发送到 JVM 的信号并调用适当的 JVM 方法处理

JVM内存

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

bzoj1116: [POI2008]CLO

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id1116 题目大意:Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 你要把其中一些road变成单向边使得:每个town都有且只有一个入度 题解&am…

java排序算法大全_各种排序算法的分析及java实现

排序一直以来都是让我很头疼的事,以前上《数据结构》打酱油去了,整个学期下来才勉强能写出个冒泡排序。由于要找工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间重新研究了一下。排序大的分类可以分为两…

Cocos2d-x 3.0 简捷的物理引擎

Cocos2d-x 3.0 开发(九)使用Physicals取代Box2D和chipmunk http://www.cocos2d-x.org/docs/manual/framework/native/physics/physics-integration/zh -- 官网Demo 水墨鱼的专栏 http://www.cocos2d-x.org/docs/catalog/zh --- 官方 搭“server” 须要哪…

google i/o_Google I / O 2017最有希望的突破

google i/oby Aravind Putrevu通过Aravind Putrevu Google I / O 2017最有希望的突破 (The most promising breakthroughs from Google I/O 2017) Google I/O is one of the biggest developer conferences. This year was particularly exciting. There were two keynotes: o…

java clex 中的 IloLPMatrix

最近看 cplex 在 java 的 callback,发现它给的 callback 例子中,都是用 IloLPMatrix 这个类放约束条件,在 IloLPMatrix 中, 每个约束条件存储在 IloRange 中。 使用 IloLPMatrix 的好处是,这个类可以方便查看模型中的求…

6/12 Sprint2 看板和燃尽图

转载于:https://www.cnblogs.com/queenjuan/p/5578551.html

mailto 附带附件_我和我的朋友如何将附带项目发展为每月$ 17,000的业务

mailto 附带附件In 2014, my friends and I set out to build the best possible web design tools. We built UI kits, Admin Dashboards, Templates, and Plugins. We’ve always tried to create products that are helpful in the development process, and that we oursel…

转:PHP应用性能优化指南

程序员都喜欢最新的PHP 7,因为它使PHP成为执行最快的脚本语言之一(参考PHP 7 vs HHVM 比较)。但是保持最佳性能不仅需要快速执行代码,更需要我们知道影响性能的问题点,以及这些问题的解决方案。本文涵盖了保障PHP应用平…

java 运行异常处理_Java编程异常处理和I/O流

重点:  1.在编写程序时,要正确地使用捕获例外和声明抛出异常的两种例外处理的方法。2.遇到实际问题时,要根据需要正确使用各种输入/输出流,特别是对中文使用适当的字符输入流。3.正…

反射练习

1.反射 一种计算机处理方式。是程序可以访问、检测和修改它本身状态或行为的一种能力。 新建一个Person类: public class Person { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age age; } pu…

开源 物联网接入_我们刚刚推出了开源产品。 那么接下来会发生什么呢?

开源 物联网接入by Victor F. Santos由Victor F.Santos 我们刚刚推出了开源产品。 那么接下来会发生什么呢? (We just launched an open source product. So what happens next?) Last month me and the ninja god Pedro launched GitShowcase, a plug-and-play p…

Class? getClass()

getClass()方法属于Object的一部分,它将产生对象的类,并且在打印该类时,可以看到该类类型的编码字符串,前导"["表示这是一个后满紧随的类型的数组,而紧随的"I"表示基本类型int, //: initialization/OptionalTrailingArgrments.java package object;import …

log4j使用说明

1.log4j代码中修改输出级别:如: protected final Logger logger LoggerFactory.getLogger(Test.class); 将其转成实现类,修改输出级别即可System.out.println(logger.isDebugEnabled()?"debug is true":"debug is false&quo…

java list集合增删改_Java中集合类list的增删改查

今天给大家带来的是Java中list类的使用,java.util 包提供了list类来对线性数据操作List接口是Collection接口的子接口,List有一个重要的实现类--ArrayList类,List中的元素是有序排列的而且可重复,所以被称为是序列List可以精确的控…

IIS6、IIS7和IIS8各版本的差别

一、写在前面 目前市面上所用的IIS版本估计都是>6.0的.所以我们主要以下面三个版本进行讲解 服务器版本IIS默认版本server20036.0server20087.0server20128.0二、IIS6的请求过程 由图可知,所有的请求会被服务器中的http.sys组件监听到,它会根据IIS中的 Metabase 查看基于该 …

Android Studio 插件的使用

1、GsonFormat https://github.com/zzz40500/GsonFormat 2、Android SelectorChapek http://blog.csdn.net/weifei554287925/article/details/41727541

函数式编程基础_在收件箱中免费学习函数式编程的基础

函数式编程基础by Preethi Kasireddy通过Preethi Kasireddy 在收件箱中免费学习函数式编程的基础 (Learn the fundamentals of functional programming — for free, in your inbox) If you’re a software developer, you’ve probably noticed a growing trend: software ap…

安卓Java虚拟机大小_虚拟机为安卓流畅度背锅,是因为关系数十万程序员饭碗?...

导读:虚拟机相当于应用程序在不同运行环境中的翻译。说起谷歌安卓系统的“虚拟机”,很多人爱拿它和苹果iOS做比较,结果,安卓的很多短腿儿都让虚拟机背了锅,比如安卓手机运存容量是iPhone的两到三倍,流畅度却…

Redis PHP连接操作

安装 要在PHP程序中使用Redis,首先需要确保 Redis 的PHP驱动程序和 PHP 安装设置在机器上。可以查看 PHP教程 教你如何在机器上安装PHP。现在,让我们来看看一下如何设置 Redis 的PHP驱动程序。 需要从 github 上资料库: https://github.com/n…

AppCompatActivity实现全屏的问题

前言:我的 Activity 是继承 BaseActivity , 而 BaseActivity 继承 AppCompatActivity 。 BaseActivity 的继承 /*** 应用程序的基类**/ public class BaseActivity extends AppCompatActivity {}HomeActivity 的继承 public class HomeActivity extends BaseActivit…