jvm 安装位置_简单了解JVM

19a1edd716d09c974e11652f9af438e4.png

1、JVM的位置:JVM是在操作系统上面的应用软件

  JVM虚拟机有三种如下:

    ① Sun公司的HotSpot;
    ② BEA公司的JRockit;
    ③ IBM公司的J9 JVM;

  java虚拟机属于第一种:

6837cac6a382c1e3450394c02ff27d27.png

2、JVM的体系结构:

29d68f7f72e0bbbd3198952a512d78b6.png

3、类加载器

  作用:加载class文件 -------(类是模板,对象是具体的)

     简单执行过程:

c4545ac751521416f45a543a9fada750.png

  双亲委派机制:

    定义:在程序运行时某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器(即ExtClassLoader),ExtClassLoader加载器在把任务委托给他的上级类BootstrapClassLoader,如果BootstrapClassLoader没有加载就到ExtClassLoader加载,如果ExtClassLoader没有加载就自己加载,按照这个递归这个操作,来完成加载该文件的机制就称为双亲委派机制

类加载器的类别:

    (1)BootstrapClassLoader(启动类加载器)

        它是由C++写的,加载java核心库-->java.*;java/lib目录下的jar,自己复制进去也会加载,但是java环境会被不坏

    (2)ExtClassLoader(标准扩展类加载器)

        它是由java写的,加载扩展库即java/lib/ext目录下的jar,java.ext.dir 指定位置中的类,开发者可以直接使用标准扩展类加载器。

    (3)AppClassLoader(系统类加载器)

        它是由java写的,加载程序所在的目录,我们自己写的类大多数使用这个如user.dir所在的位置的class

    (4)CustomClassLoader(用户自定义类加载器)

        它是由java写的,用户自定义的类加载器,可加载指定路径的class文件,Tomcat实现就是有自己的加载器

    双亲委派机制的作用:

      1)、防止加载相同的class文件,保证数据的安全

      2)、防止核心类被破坏,造成java环境的污染

4、沙箱安全机制

  防止远程代码(病毒)入侵

5、native

凡是带native关键字的,说明java的作用范围达不到了,只能调用C语言的库;会进入本地方法栈;然后会调用本地接口(JNI),JNI作用:扩展java的使用,融合不同的语言为java所用;最初的C、C++,它在内存区域中专门打开调了一块标志区域:本地方法栈,登记native方法

  例子:源码:Thread的类中的----》private native void start0();

6、PC寄存器

  1)、PC寄存器( PC register ):每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄存器。PC寄存器里保存有当前正在执行的JVM指令的地址。 每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。保存下一条将要执行的指令地址的寄存器是 :PC寄存器。PC寄存器的内容总是指向下一条将被执行指令的地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。

  2)、每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,也即将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。

  3)、这块内存区域很小,它是当前线程所执行的字节码的行号指示器,字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令。

  4)、如果执行的是一个Native方法,那这个计数器是空的。

7、方法区:

  方法区(Method Area)与 Java 堆一样,是所有线程共享的内存区域。

静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存在方法区中,但是实例变量存在堆内存中和方法区无关

8、栈:(先进后出、后进先出)数据结构

  定义:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

  程序=数据结构+算法

  程序执行方法,就是靠栈来调用,最先把main()方法压在栈的底部,其它方法在上面,等到main()出栈程序执行也就结束了。

b23da0047a0631ac961c8e959dcc433d.png

  所以栈是不存在垃圾回收问题

9、堆

  Heap,一个JVM只有一个堆内存,堆内存的大小是可以调节的

  类加载器读取了类文件后,一般会把类、方法、常量、变量,保存我们所有引用类型的真实对象

  堆内存中分成三个区域:

    1)、新生区(伊甸区)

    2)、养老区

    3)、永久存储区

570d9f9d2a5c694ed5822b942e2c6d55.png

    所有GC垃圾回收是在堆里的伊甸区和养老区

    jdk8后把永久区名称改为元空间

    新生区:

      类:诞生和成长的地方,甚至死亡

      伊甸区:所有对象都是在这里new出来的,即实例化

      幸存区(0 1):

    养老区:

    永久区:这个区域常驻内存的,用来存放携带的class对象,interface元数据,存储的是java运行时的一些环境或类信息,这个区域不存在垃圾回收

      jdk1.6:永久代、常量池在方法区

      jdk1.7:永久代、但是慢慢的退化,常量池在堆中

      jdk1.8之后:无永久代、常量池在元空间

    OOM定义:OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。看下关于的官方说明: Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. 意思就是说,当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error(注:非exception,因为这个问题已经严重到不足以被应用处理)。

    遇到OOM问题:

      参考:https://www.cnblogs.com/zhoading/p/10249302.html

      (1)调堆内存大小;

    修改堆的大小:   

      说明:

        -Xms:20M 初始化堆内存大小

        -Xmn:20M 堆内存最大值

        -Mmn:10M 新生代内存设置

        -XX:+PrintGcDetails 用于打印GC的日志信息

        -verbose:gc 用于查看Java垃圾收集的结果

        idea界面:

312a05037de1dbd51c86f9957cd67de7.png

    (2)分析内存

        分析堆内存工具:MAT(eclipse)、Jprofiler(idea)

        MAT、Jprofiler作用:快速分析Dump内存文件,快速定位内存泄漏

VM参数:https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html

        要在idea安装插件Jprofiler

          (1)安装:https://www.cnblogs.com/javabg/p/11499098.html

          (2)使用:https://segmentfault.com/a/1190000021881331

10、GC(垃圾回收)

  GC的作用区域:方法区,堆

  JVM在进行GC时,并不是三个统一回收,大部分时候,回收新时代

    年轻代:存活率低-》复制算法

    幸存区(form,to------》谁空谁是to)

    老年区:存活率大-》标记清除算法(内存碎片不是太多)、标记压缩混合实现

  GC两种类:轻GC(普通的GC)、重GC(全局GC)

  GC的算法:标记清除法、标记整理、复制算法、引用计数法

    参考:https://blog.csdn.net/qq_21383435/article/details/80473540

    总结:

      内存效率:复制算法>标记清除算法>标记压缩算法

      内存整齐度:复制算法=标记压缩算法>标记清除算法

      内存利用率:标记清除算法=标记压缩算法>复制算法

11、举例

  (1)JMM(java Memory Model)-》Java内存模型

    1)定义:(java Memory Model)-》Java内存模型

    2)作用:缓存一致性协议,用于定义数据读写的规则(遵循)

      参考:https://blog.csdn.net/zjcjava/article/details/78406330

    3)如何学习?

      面试题:https://www.cnblogs.com/wjh123/p/11094622.html

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

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

相关文章

前端安全之 XSS攻击

参看: XSS的原理分析与解剖 前端安全 -- XSS攻击 web大前端开发中一些常见的安全性问题 1、前言 XSS 是面试时,hr提出来给我的,然后大体的浏览一遍,今天才查阅资料大体了解了它。 XSS 攻击:攻击者向HTML页面传入恶意的…

图片

转载于:https://www.cnblogs.com/water-1/p/11138418.html

idea 调节背景护眼_夜间用电脑亮瞎眼睛?这份夜间护眼指南来帮你。

题图:来自 Unsplash文/彭宏豪,笔名/安哥拉不知从什么时候起,「头秃」成了网友和周围人口中的一个高频词汇,似乎很多事情都离不了头秃——学到头秃、工作到头秃、熬夜到头秃等等,就连「突然」也渐渐演变成「秃然」。但对…

编写有效用例电子版_剖析用例设计方法的使用

今天给大家讲解的是用例设计方法的使用,在设计用例时该如何应用用例设计方法、设计出覆盖率高的测试用例呢?场景简介:普遍登录页面测试用例设计分析拿到需求,首先要做需求分析。我们看到登录界面有三个测试点:1.账号2.…

一个参数大小写引发的uploadify报错 Syntax error, unrecognized expression: #

上传控件uploadify 报错"Syntax error, unrecognized expression: #" 版本为 uploadify3.2 报错原因:参数ID【hidInfoId】小写错写成了大写。debug过程: ①:报错 "Syntax error, unrecognized expression: #" ②&#xf…

linux7 dns正向,Centos 7 搭建DNS正向解析和反向解析

Centos 7 搭建DNS正向解析和反向解析服务的三要素:安装-配置-启动1.使用yum安装DNSyum install bind -y2.修改配置文件vi /etc/named.conf修改以下内容:listen-on port 53 { any; };allow-query { any; };vi /etc/named.rfc1912.zones在末尾添加以下内容:zone "…

个人pkm软件 pim软件_个人申请软件著作权需要走哪些流程

软件著作权是企业的无形资产之一,它与商标权、专利权一起构成企业的知识产权,是企业投资、入股、融资等的有效无形资产,那么个人申请软件著作权需要走哪些流程?阅读完以下上海知识产权律师咨询为您整理的内容,一定会对…

最小值c语言 循环,C语言循环结构 -C语言求全班同学身高的最大值和最小值

编写程序,帮桐桐找出全班同学身高的最大值和最小值。问题分析输入:班级总人数;依次输入班上每位同学的身高值(float型)。输出:最大身高值和最小身高值(float型)。这是一个依次比较大小的问题,具体步骤为:1)…

Android底层开发技术实战详解——内核、移植和驱动

《Android底层开发技术实战详解——内核、移植和驱动》基本信息作者: 王振丽 丛书名: Android移动开发技术丛书 出版社:电子工业出版社 ISBN:9787121175930上架时间:2012-8-13出版日期:2012 年8月开本&…

mysql select in 不存在返回0_MySQL索引优化看这篇文章就够了!

来源:cnblogs.com/songwenjie/p/9410009.html本文主要讨论MySQL索引的部分知识。将会从MySQL索引基础、索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开(本文图片可点开放大)。一、MySQL索引基础首先,我们将从索引基础开…

《软件测试实战:微软技术专家经验总结》

《软件测试实战:微软技术专家经验总结》 基本信息 作者: 史亮 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115345844 上架时间:2014-3-3 出版日期:2014 年2月 开本:16开 页…

websocket一直无法链接_.NET Core 实现基于Websocket的在线聊天室

什么是Websocket我们在传统的客户端程序要实现实时双工通讯第一想到的技术就是socket通讯,但是在web体系是用不了socket通讯技术的,因为http被设计成无状态,每次跟服务器通讯完成后就会断开连接。在没有websocket之前web系统如果要做双工通讯…

c语言既能读字母也能读数字,2014计算机二级考试C语言考前预测选择题

无忧考网为大家收集整理了《2014计算机二级考试C语言考前预测选择题》供大家参考,希望对大家有所帮助!!!1.结构化分析方法是面向( )的自顶向下、逐步求精进行需求分析的方法A.对象B.数据结构C.数据流D.目标2.对线性表进行二分法检…

半监督分类算法_基于同质区和迁移学习的高光谱图像半监督分类

作 者 信 息赵婵娟,周绍光,丁 倩,刘丽丽(河海大学 地球科学与工程学院,江苏 南京 211100)“【摘要】针对高光谱遥感图像分类中标记样本难获取的问题,提出了一种基于同质区和迁移学习的新型半监督分类方法。首先对高…

c语言 结构体数组嵌套另一个结构体数组怎么初始化?,如何初始化结构体数组(内嵌结构体)...

Keil 结构体变量初始化tujidi1csd25142016-09-30一维数组结构体数组结构体数组,通过改变指针类型改变访问数组的方式toto129748850424332014-08-01mfc结构体指针、结构体数组指针u01399024812292014-12-14memset结构体初始化shagua_nan184092016-03-16【C -> 容器…

本特利3500_本特利技术控的自我修养之 轴位移探头安装

正在学习之-客户答疑国家疫情当前,除了保护好自己、不给国家添麻烦以外我们能做的实在有限。上学时因为种种原因没有按家里的期望学医,也没有能够考上最喜欢的生物专业(理想中希望去非洲做动物类研究工作-跟拍狮子)至今还是憾事,但是加入本特…

快捷方式修复_Mac上的屏幕截图不起作用该如何修复?

屏幕截图是Mac提供的内置功能,很少有它不起作用。但是由于某些意外的设置或硬件问题,Mac上的屏幕截图有时无法正常工作,这里提供的是Mac上的屏幕截图不起作用该如何修复?1.在Mac上启用屏幕快照快捷方式如果您按CMD SHIFT 3或CMD…

计算机二级2019年9月c语言题库,(3)2019年9月计算机二级C语言试题

当你的计算机知识还撑不起你的学习、工作时,那你就应该静下心来刷计算机等级考试题库-二级C语言试题。1)下列叙述中正确的是( )。A.解决同一个问题的不同算法的时间复杂度一般是不同的B.解决同一个问题的不同算法的时间复杂度必定是相同的C.对同一批数据作同一种处理…

Android应用开发学习笔记之多线程与Handler消息处理机制

作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 和JAVA一样,Android下我们可以通过创建一个Thread对象实现多线程。Thread类有多个构造函数,一般通过构造函数Thread(Runnable runnable)实现多线程,代码如下&#…

nsga2算法c++实现_Bellman-Ford算法

之前文章对于Dijkstra算法进行了讲解和实现,其实现的原理在于采用贪心算法,遍历N(结点数)次,每次找到局部最优的路径的结点u,判断该节点可达的顶点v的权重是否大于结点u权重u->v的权重,如果大于则替换顶点v的权重(也…