精华内容
下载资源
问答
  • JVMJava Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一...

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。

    1、JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。

    4ba323c0319e6221d413b9eba4670a46.png

    2、JVM的体系结构:

    类装载器(ClassLoader)(用来装载.class文件)

    执行引擎(执行字节码,或者执行本地方法)

    运行时数据区(方法区、堆、java栈、PC寄存器、本地方法栈)

    4cd6010ff5b9c653319346279c24e17e.png

    3、JVM运行时数据库示意图

    21ca3e4511126cb3be395d0dd4241927.png

    1、/3JRE/JDK/JVM是什么关系

    JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java 程序都要在JRE下才能运行。普通用户只需要运行已开发好的java程序,安装JRE即可。

    3c5aaaa6ba1550cd8d82e8e51b5dd56d.png

    2、JDK(Java Development Kit)是程序开发者用来来编译、调试java程序用的开发工具包。JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是 安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件。

    6d1c40e1e0a466fe17d7b9c6a98fbb59.png

    3、

    JVM(JavaVirtualMachine,Java虚拟机)是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言最重要的特点就是跨平台运行。使用JVM就是为了支持与操作系统无关,实现跨平台。

    d95d0e7fb0cef1b3fcc53150df2b2730.png

    以上就是关于JAVA JVM的原理和知识点,感谢大家的阅读和对脚本之家的支持。

    展开全文
  • java JVM内存结构之PC寄存器 本篇自己学习记录,如有错误,请各位大佬指正! JVM 内存模型图 一 ,PC寄存器介绍(PC Register) ​ JVM中的PC程序计数寄存器(Program Counter Register)中,Register 的命名源于cpu中的...

    java JVM内存结构之PC寄存器

    本篇自己学习记录,如有错误,请各位大佬指正!

    JVM 内存模型图

    在这里插入图片描述

    一 ,PC寄存器介绍(PC Register)

    ​ JVM中的PC程序计数寄存器(Program Counter Register)中,Register 的命名源于cpu中的寄存器,寄存器存储指令相关的现场信息,cpu只有把数据 装载到寄存器才能够运行,这里,并非是广义上所指的物理寄存器,或许将其翻译为pc计数器(或指令计数器)会更为贴切,JVM中的PC寄存器是物理寄存器的抽象.

    作用:

    ​ pc寄存器是用来存储指向下一条要执行指令的地址,即下一条要执行的代码,由执行引擎来读取下一条 指令

    在这里插入图片描述

    特点:

    1. 运行空间很小,小到可以忽略不计,且运行速度是最快的

    2. 每个线程有一个私有的程序计数器,线程之间互不影响

    3. 运行时数据区中唯一不会出现OOM(OutOfMemoryError)的区域,没有垃圾回收(gc)。

    4. 它是流程控制的指示器,分支 .流程控制,异常处理,线程 恢复等基础功能都依赖于pc寄存器来完成

    5. 如果正在执行的本地方法(native 方法),这个计数器值则应为未定义。(undefined)

    二,举例说明

    下面简单代码做说明

    在这里插入图片描述

    在这里插入图片描述

    框1 为执行指令的数字编号 ,框2 为 执行的局面指令

    框3 为指令数字编号 与实际代码中行号的对应关系

    三,面试题

    1.使用PC寄存器存储字节码指令地址有什么用?

    ​ 因为线程是一个个的顺序执行流,CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行,JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码指令,记录下一条字节码执行的指令,实现分支循环跳转、异常处理、线程恢复等功能。

    2.PC寄存器为什么被设定为私有的?

    ​ CPU为每个线程分配时间片,多线程在一个特定的时间段内只会执行某一个线程的方法,CPU会不停地进行任务切换,线程需要中断、恢复,CPU,多线程,分配时间片,只执行一个线程,CPU任务切换,线程中断恢复,各个线程、PC寄存器记录、当前字节码指令地址,各个线程之间可进行独立计算,防止相互干扰。为了能够准确的记录各个线程当前正在执行的字节码指令,最好的办法自然就是为每一个线程都分配一个 pc寄存器,防止相互干扰。为了能够准确的记录各个线程当前正在执行的字节码指令,最好的办法自然就是为每一个线程都分配一个 pc寄存器

    展开全文
  • Java JVM知识汇总

    2021-09-26 11:35:11
    Java虚拟机(Java virtual machine,JVM)是Java程序运行基础,Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统。 Java虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行...

    1、JVM 是什么?

            Java虚拟机(Java virtual machine,JVM)是 Java 程序运行基础,Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统。

            Java虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”。

            如上图所示,JVM 知识点有 6 个大方向,其中,内存模型、类加载机制、GC 垃圾回收是比较重点的内容。性能调优部分偏重实际应用,重点突出实践能力。编译器优化和执行模式部分偏重理论基础,作为java大佬可能要了解全部内容,作为 Android 仅仅了解内存模型、类加载机制、GC 垃圾回收这几项就可以了。

    各个部分需要了解的知识点如下。

    • 内存模型程序计数器、方法区、堆、栈、本地方法栈的作用,保存哪些数据。

    • 类加载双亲委派的加载机制,以及常用类加载器分别加载哪种类型的类。

    • GC分代回收的思想和依据,以及不同垃圾回收算法实现的思路、适合的场景。

    • 性能调优:常用的 JVM 优化参数的作用,参数调优的依据,常用的 JVM 分析工具能分析哪类问题,以及使用方法。

    • 执行模式:解释、编译、混合模式的优缺点,Java7 提供的分层编译技术。需要知道 JIT 即时编译技术和 OSR(栈上替换),知道 C1、C2 编译器针对的场景,其中 C2 针对 Server 模式,优化更激进。在新技术方面可以了解 Java10 提供的由 Java 实现的 Graal 编译器。

    • 编译优化:前端编译器 javac 的编译过程、AST 抽象语法树、编译期优化和运行期优化。编译优化的常用技术包括公共子表达式的消除、方法内联、逃逸分析、栈上分配、同步消除等。明白了这些才能写出对编译器友好的代码。

    下面咱们通过各个方面来理解 JVM 的这些知识。

    2、JVM 工作流程

            我相信有些人跟我一样对内存的堆内存(heap)和栈内存(Stack)是怎么划分的不是很清楚,看完这块保你明白的彻彻底底。

            Java 的内存区域划分实际上远比这复杂:Java 虚拟机在执行 Java 程序的过程中,会把它所管理的内存划分为不同的数据区域。下面这张图描述了一个 Scc.java 文件被 JVM 加载到内存中的过程:

    1. Scc.java 文件首先需要经过编译器编译,生成 Scc.class 字节码文件。

    2. Java 程序中访问Scc这个类时,需要通过 ClassLoader(类加载器)将Scc.class 加载到 JVM 的内存中。

    3. JVM 中的内存可以划分为若干个不同的数据区域,主要分为:程序计数器、虚拟机栈、本地方法栈、堆、方法区。

    3、相关推荐

            Java 垃圾回收(GC)



            Java 内存模型



           Java 类加载器



            Java的四种引用方式

    展开全文
  • java jvm GC 参数设置

    2021-03-04 06:08:01
    1: heap sizea: -Xmx指定jvm的最大heap大小,如:-Xmx2gb: -Xms指定jvm的最小heap大小,如:-Xms1gc: -Xmn指定jvm中New Generation的大小,如:-Xmn256md: -XX:PermSize指定jvm中Perm Generation的最小值,如:-XX:PermSize=...

    1: heap size

    a: -Xmx

    指定jvm的最大heap大小,如:-Xmx2g

    b: -Xms

    指定jvm的最小heap大小,如:-Xms1g

    c: -Xmn

    指定jvm中New Generation的大小,如:-Xmn256m

    d: -XX:PermSize

    指定jvm中Perm Generation的最小值,如:-XX:PermSize=32m

    e: -XX:MaxPermSize

    指定Perm Generation的最大值,如:-XX:MaxPermSize=64m

    f: -Xss

    指定线程桟大小,如:-Xss128k

    g: -XX:NewRatio

    指定jvm中Old Generation heap size与New Generation的比例,在使用CMS GC的情况下此参数失效, 如:-XX:NewRatio=2

    h: -XX:SurvivorRatio

    指定New Generation中Eden Space与一个Survivor Space的heap size比例,-XX:SurvivorRatio=8,那么在总共New Generation为10m的情况下,Eden Space为8m

    i: -XX:MinHeapFreeRatio

    指定jvm heap在使用率小于n的情况下,heap进行收缩,Xmx==Xms的情况下无效,如:-XX:MinHeapFreeRatio=30

    j: -XX:MaxHeapFreeRatio

    指定jvm heap在使用率大于n的情况下,heap进行扩张,Xmx==Xms的情况下无效,如:-XX:MaxHeapFreeRatio=70

    k: -XX:LargePageSizeInBytes

    指定Java heap的分页页面大小,如:-XX:LargePageSizeInBytes=128m

    2: garbage collector

    a: -XX:+UseParallelGC

    指定在New Generation使用parallel collector,并行收集,同时启动多个垃圾回收thread,不能和CMS gc一起使用.系统吨吐量优先,但是会有较长长时间的app pause,后台系统任务可以使用此gc

    b: -XX:ParallelGCThreads

    指定parallel collection时启动的thread个数,默认是物理processor的个数,如:-xx:ParallelGCThreads=8

    c: -XX:+UseParallelOldGC

    指定在Old Generation使用parallel collector

    d: -XX:+UseParNewGC

    指定在New Generation使用parallel collector,是UseParallelGC的gc的升级版本,有更好的性能或者优点,可以和CMS gc一起使用

    e: -XX:+CMSParallelRemarkEnabled

    在使用UseParNewGC的情况下,尽量减少mark的时间

    f: -XX:+UseConcMarkSweepGC

    指定在Old Generation使用concurrent cmark sweep gc,gc thread和app thread并行,所以称作concurrent.app pause时间较短,适合交互性强的系统,如web server

    g: -XX:+UseCMSCompactAtFullCollection

    在使用concurrent gc的情况下,防止memory fragmention,对live object进行整理,使memory碎片减少

    h: -XX:CMSInitiatingOccupancyFraction=n

    指示在old generation在使用了n%的比例后,启动concurrent collector,默认值是68,如:-XX:CMSInitiatingOccupancyFraction=70

    有个bug,在低版本的jvm上出现,http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6486089

    i: -XX:+UseCMSInitiatingOccupancyOnly

    指示只有在old generation在使用了初始化的比例后concurrent collector启动收集

    3:others

    a: -XX:MaxTenuringThreshold

    指定一个object在经历了n次young gc后转移到old generation区,在linux64的java6下默认值是15,此参数对于throughput collector无效,如:-XX:MaxTenuringThreshold=31

    b: -XX:+DisableExplicitGC

    禁止java程序中的full gc,如System.gc()的调用

    c: -XX:+UseFastAccessorMethods

    原始类型get,set方法的优化

    d: -XX:+PrintGCDetails

    打应垃圾收集的情况如:

    [GC 15610.466: [ParNew: 229689K->20221K(235968K), 0.0194460 secs] 1159829K->953935K(2070976K), 0.0196420 secs]

    e: -XX:+PrintGCTimeStamps

    打应垃圾收集的时间情况,如:

    [Times: user=0.09 sys=0.00, real=0.02 secs]

    f: -XX:+PrintGCApplicationStoppedTime

    打应垃圾收集时,系统的停顿时间,如:

    Total time for which application threads were stopped: 0.0225920 seconds

    4 -XX:+UseCompressedOops 压缩指针 64位机器,JDK1.6支持

    展开全文
  • create_vm函数启动虚拟机 add函数,将线程加入到线程队列 ...jni_CallStaticVoidMethod函数,实现对Java应用程序的主方法的调用 jni_DetachCurrentThread函数 jni_DestroyJavaVM函数,销毁JVM. ...
  • Java JVM

    2021-01-16 23:50:52
    本文会记录Java JVM的一些知识总结。
  • I'm trying to figure out if there's a way to determine the JVM startup properties from within a running java process. Specifically I'm trying to find out where parameters such as -Xmx (max heap size)....
  • Java JVM调优篇

    千次阅读 多人点赞 2021-09-01 22:17:32
    加载时类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口。注意这里不一定非得从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar...
  • javaJVM及相关概念

    2021-02-28 10:42:56
    public class TestDemo{public ...}}上面程序会报空指针异常,如下图,在报的这个异常中,有一行日志 at TestDemo,main(TestDemo.java:4) 代表程序运行到TestDemo 中main()函数第四行的时候发生的错误,就是通过...
  • Java:JVM参数设置

    2021-03-07 00:45:48
    1.基本简介:最基本的两个参数是1. -Xms 初始堆大小(默认为物理内存的1/64) 2....1、Eclipse设置JVM参数在eclipse.ini中:-startupplugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar--launcher.librar...
  • Java JVM常见知识点串讲

    千次阅读 2021-11-30 10:57:33
    大家可能在面试中,或多或少都遇到JVM相关的面试题,但是有个问题,就是JVM其实知识点挺多的,本文以笔者亲身经历为主,通过一个JVM的常见面试题,进行逐步了解,学习JVM。 这一切都是逼的,回想我刚工作的时候,...
  • 容器化部署JAVAJVM参数配置清单 ENTRYPOINT java ${JAVA_OPTS} -server \ -XX:+DisableExplicitGC \ -XX:+UseParNewGC \ -XX:+UseConcMarkSweepGC \
  • Java堆(Java Heap)是JVM所管理的最大内存区域,也是所有线程共享的一块区域,在JVM启动时创建。此内存区域存放的都是对象的实例和数组。JVM规范中说到:”所有的对象实例以及数组都要在堆上分配”。Java堆是垃圾回收...
  • 1.概述 转载:java Jvm内存结构
  • JVM启动流程1.java虚拟机启动的命令是通过java +xxx(类名,这个类中要有main方法)或者javaw启动的。2.执行命令后,系统第一步做的就是装载配置,会在当前路径中寻找jvm的config配置文件。3.找到jvm的config配置文件...
  • JAVA JVM工作原理

    2021-10-21 18:24:25
    JVMJava Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 JVM 工作原理图 首先输入javac file.java 会...
  • 我试图运行一个Java程序,但它采取默认GMT时区而不是操作系统定义的时区。我的JDK版本是1.5,操作系统是Windows Server Enterprise(2007)Windows具有指定的中央时区,但当我运行以下程序,它给我一个GMT时间。import...
  • Java 获取当前JVM进程ID

    2021-03-18 11:16:19
    Java 获取当前JVM进程IDpublic static final int jvmPid() {try {RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();Field jvm = runtime.getClass().getDeclaredField("jvm");jvm.setAccessible(true)...
  • 相信很多人还没有接触到这个概念,本篇对javajvm的存储区进行的内容的整理,下面一起来看看这两种存储取的概念和区别吧。1、分类JVM有两种类型的存储区:常量缓冲池和方法区。常量缓冲池用于存储类名、方法名和字段...
  • 简介主要是介绍一下对运行Java程序的一些跟踪,以及对JVM内存等方面进行运维的一些方法。反解析class文件的工具使用一般使用jd-gui工具进行反编译class文件有些jd-gui无法反编译的class,可以使用luyten工具进行反...
  • java虚拟机jvm下载什么是JVM Java虚拟机(JVM)是使计算机能够运行Java程序的抽象计算机。 JVM有三个概念: 1.规格 2.实施 3.实例。 该规范是正式描述JVM实现要求的文档。 具有单一规范可确保所有实现都可互操作。...
  • 用户1148531发表于向治洪地址:https://cloud.tencent.com/developer/article/1038435在这篇文章中:概述jvm启动流程分析配置JVM装载环境虚拟机参数解析设置线程栈大小执行main方法概述当我们写一个Java类,并重写...
  • Java获取 JVM 运行信息

    2020-12-29 20:18:01
    //获取JVM的启动时间,版本及名称,当前进程ID,环境变量等 System.out.printf("jvmName:%s %s %s%n", runtime.getVmName(), "version", runtime.getVmVersion()); System.out.printf("jvmJavaVer:%s%n", System....
  • 使用JMX连接到远程JVM通常情况下,JVisualVM可以像JConsole一样,通过JMX的方式连接到远程服务器上的JVM,此时能获取到JVM的基本信息(启动参数、系统属性)、CPU使用情况、堆内存整体情况以及线程的整体情况等。...
  • 本篇主要分享下在JVM中int类型数值采用何种指令入栈的,根据int值范围JVM入栈字节码指令就分为4类,下面分别介绍下这四类指令。前言当int取值-1~5采用iconst指令,取值-128~127采用bipush指令,取值-32768~32767采用...
  • Java虚拟机(JVM)面试题(2020最新版)

    千次阅读 2021-01-05 15:35:26
    Java内存区域 说一下 JVM 的主要组成部分及其作用? 说一下 JVM 运行时数据区 深拷贝和浅拷贝 说一下堆栈的区别? 队列和栈是什么?有什么区别? HotSpot虚拟机对象探秘 对象的创建 为对象分配内存 处理...
  • 设置JVM内存的参数有四个:-Xmx Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;-Xmx此设置控制 Java 堆的最大大小。正确调整此参数有助于降低垃圾回收开销,...
  • 设置如下2个参数即可: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof -XX:+HeapDumpOnOutOfMemoryError 设置当首次遭遇...java -Xms750m -Xmx750m -Xmn512m -Xss1024k -XX:MaxPermSize=1.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 925,809
精华内容 370,323
关键字:

javajvm

java 订阅
友情链接: code.rar