jvm

JRE&JDK&JVM

时光毁灭记忆、已成空白 提交于 2020-01-31 15:33:20
day1_01 JRE&JDK&JVM JRE(Java Runtime Environment) JDK(Java Development Kit) 关系 JVM(Java Virtual Machine) JRE(Java Runtime Environment) 是Java程序的运行环境,包含 JVM 和运行所需的 类核心库 JDK(Java Development Kit) 是Java程序开发工具包,包含 JRE 和开发人员使用的工具 关系 我们想要运行一个已有的java程序,只需要安装 JRE 即可 我们想要开发一个全新的java程序,则必须安装 JDK JVM(Java Virtual Machine) 也叫java虚拟机是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的 来源: CSDN 作者: Mr.东方老赢 链接: https://blog.csdn.net/qq_40181435/article/details/104121885

深入理解JVM:类文件结构

不羁岁月 提交于 2020-01-31 15:17:45
一、 在java诞生的时候就有一个口号:“一次执行,到处运行!”。字节码实现了这部分功能。 注意 :JVM不和包括java在内的任何语言绑定,它只与Class文件这种特定的二进制文件格式所关联。 其他语言可以通过编译器生成字节码文件,然后再jvm上面运行。 二、Class文件 任何一个Class文件都对应这唯一一个类或者接口的定义信息,但反过说不正确。 Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照紧凑地排列再Class文件之中,中间没有增加任何间隔符。 Class文件格式采用一种类似于C语言结构体的伪结构体存储数据,这种伪结构体只有两种数据类型: 无符号数和表 无符号数属于基本数据类型,以u1、u2、u4、u8来表示1到8字节的无符号数。 表是由多个无符号数或者其他表作为数据项构成的复合数据类型。 整个Class文件本质上就是一张表,习惯上以“_info”结尾。 ClassFile { u4 magic; //Class 文件的标志 u2 minor_version;//Class 的小版本号 u2 major_version;//Class 的大版本号 u2 constant_pool_count;//常量池的数量 cp_info constant_pool[constant_pool_count-1];//常量池 u2 access_flags;/

Java面试题——JVM(5)

*爱你&永不变心* 提交于 2020-01-31 12:43:23
题目:请你谈谈OOM的认识 java.lang.StackOverflowError 爆栈:递归调用自身。 public class StackOverflowErrorDemo { public static void main ( String [ ] args ) { stackOverflowError ( ) ; } private static void stackOverflowError ( ) { stackOverflowError ( ) ; } } 问题:这是一个错误还是一个异常? 是一个错误,不是一个异常。 java.lang.OutOtMemoryError:Java heap space 堆空间溢出,new一个大对象或者对象太多。 public class JavaHeapSpaceDemo { public static void main ( String [ ] args ) { // String str = "hello"; // while(true){ // str+=new Random().nextInt(11111111)+new Random().nextInt(22222222); // str.intern(); // } byte [ ] bytes = new byte [ 80 * 1024 * 1024 ] ; } }

JDK、JRE、JVM之间的关系

跟風遠走 提交于 2020-01-31 05:03:08
​1、什么是JDK、JRE? JDK(Java Development Kit – Java开发工具包) JDK是提供给Java开发人员使用的,其中包含了java的开发工具和JRE。所以安装了JDK,就不用在单独安装JRE了。其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等 JRE(Java Runtime Environment – Java运行环境) 包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等, 如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。 安装完jdk后,在\bin目录下放的是一些开发工具,常用的就是javac.exe(编译工具)和java.exe(运行工具),前者是把java文件编译成后缀为.class的字节码文件,后者是对字节码文件进行运行。 2、什么是JVM? JVM(Java Virtal Machine – Java虚拟机) JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指 令,管理数据、内存、寄存器。 对于不同的平台(操作系统),有不同的虚拟机。 只有某平台(操作系统)提供了对应的java虚拟机,java程序才可在此平台运行 Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”

Java基础介绍

…衆ロ難τιáo~ 提交于 2020-01-31 04:37:04
Java基础介绍 介绍 Java是一个跨平台,完全面向对象的程序设计语言,其有三个分支: - Java SE (标准版) - Java ME (微型版) - Java EE (企业版) JDK 说到Java,就必然要提到 jdk, jre, jvm JDK :(Java Development Kit) Java开发工具 JRE :(Java Runtime Environment) Java运行环境 JVM :(Java Virtual Machine) Java虚拟机 JDK要从 Oracle 官网下载,不可安装在中文目录,java的版本更新速度很快,但是在实际开发中,还是使用较为稳定的版本,比如说 jdk1.8,Java的优势在于: 一次编写,到处运行 jdk1.8官网下载地址: jdk官网下载 jdk,jrm,jvm之间的关系 jdk安装完成之后的目录结构如下: bin目录:可执行程序 java.exe Java运行时解释器 javac.exe Java编译器 javadoc.exe Java文档化工具 db目录:小型的数据库 include目录:本地接口编程 jre目录:运行环境 lib目录:类库,Java开发工具包 zip目录:jdk源码 jdk环境变量的配置 右键此电脑---高级系统设置---环境变量---系统变量---新建 变量名:JAVA_HOME 变量值

查看JVM垃圾收集器类型

萝らか妹 提交于 2020-01-31 01:02:21
1. 使用jcmd 假设java进程id为 1000 # Linux jcmd 1000 PerfCounter.print | grep gc.collector.*name # Windows jcmd 1000 PerfCounter.print | findstr gc.collector.*name 以串行收集器(-XX:+UseSerialGC )为例,返回信息如下: sun . gc . collector . 0. name = "Copy" sun . gc . collector . 1. name = "MSC" 名称与收集器对照表 名称 收集器 作用区域 启用参数 Copy Serial Young -XX:+UseSerialGC MSC Serial Old Old -XX:+UseSerialGC PSScavenge Parallel Scavenge Young -XX:+UseParallelGC PSMarkSweep Parallel Scavenge Old -XX:+UseParallelGC -XX:-UseParallelOldGC PSParallelCompact Parallel Old Old -XX:+UseParallelGC PCopy ParNew Young -XX:+UseConcMarkSweepGC 或者

JVM学习之类的加载连接和初始化过程详解

…衆ロ難τιáo~ 提交于 2020-01-31 00:18:12
闲言少叙,先说知识点 1.JAVA程序对类的使用方式可分为主动使用使用和被动使用两种 2.所有的Java虚拟机实现必须在每个类或接口被Java程序“首次主动使用”时才初始化他们 3.类的加载、连接和初始化中主动使用分为以下七种 (1)、创建类的实例 (2)、访问某个类或接口的静态变量,或者对该静态变量赋值 (3)、调用类的静态方法。 (4)、反射。 (5)、初始化一个类的子类(算是对父类的主动使用)。 (6)、Java虚拟机启动时被表明为启动类的类(Java Test) (7)、JDK1.7开始提供的动态语言支持(了解)。 4.除上面七种之外,都被视为类的被动使用,不会被初始化。 5.类的加载指的是将.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内然后在内存中创建一个java.lang.Class对象(规范未说明Class对象位于哪里,HotSpot虚拟机将其放在方法区中)用来封装类的方法区内的数据结构 6.加载.class文件的方式(一般从磁盘中),还可以从网上下载、从压缩包中、将Java源文件动态编译为.class文件等方式。 如果以上的内容你不理解,先忘掉它,咱们看两个例子 No1: public class Main { public static void main(String args[]){ System.out.println

Java语言开发环境

南楼画角 提交于 2020-01-31 00:09:50
Java虚拟机——JVM JVM(Java Virtual Machine): java虚拟机,简称JVM,是运行所有java程序的假想计算机,是java程序的运行环境,是java最具吸引力的特性之一,我们编写的java代码,都运行在JVM之上。 跨平台:任何软件的运行,都必须要运行在操作系统之上,而我们用java编写的软件可以运行在任何的操作系统上,这个特性称为java语言的跨平台特性。该特性是由JVM实现的,我们编写的程序运行在JVM上,而JVM运行在操作系统上。 JRE和JDK JRE(Java Runtime Environment):是Java程序的运行时的环境,包含JVM和运行时所需要的核心类库 JDK(Java Development Kit):是java程序开发工具包,包含JRE和开发人员使用的工具。 我们想要运行一个已有的java程序,那么只需要安装JRE即可。 我们想要开发一个全新的java程序,那么必须安装JDK。 来源: CSDN 作者: 陳研儿 链接: https://blog.csdn.net/weixin_43728184/article/details/104117238

JVM内存管理和GC

匆匆过客 提交于 2020-01-30 18:55:46
JVM内存管理以及垃圾回收。 1、虚拟机垃圾收集所关注的区域 垃圾收集只关注 堆 和 方法区 两个运行时数据区域 其他区域程序计数器、虚拟机栈、本地方法栈这些都是随线程而生,随线程而亡的。 2、自动垃圾手机的前提是要知道哪些内存可以被释放和回收。 对于实例收集监测主要有两种基本算法, 引用计数 和 可达性分析 1、引用计数算法 为对象添加一个引用计数器,没被引用一次计数器加一,引用被释放则计数器减一。当计数器为0的时候即表示对象可被回收。 缺点 引用计数存在一个基本难题,也就是很难处理循环引用的问题 2、可达性算法。 (1) 将对象及其引用关系看做一个图,选定活动的对象作为GC Roots,然后跟踪引用链条,如果一个对象和GC Roots之间不可达,也就是不存在引用链条,那么就可认为这个对象是可回收对象。 (2) 那么哪些对象可以被选 做为GC Roots呢 ? 1、JVM会把虚拟机栈中引用的对象。 2、本地方法栈中引用的对象。 3、静态属性引用的对象。 4、常量。 3、常见的垃圾手机算法。 (1)标记-清楚(Mark-Sweep)算法。 这个算法分两步走“标记”和“清除”,标记出所有要回收的对象,然后进行清除。这是最基础的收集算法,其他收集算法都是基于他再改进的。 缺点 标记和清除过程效率有限,另外就是不可避免出现碎片化问题。 (2)复制算法 背景 为了解决方法(1)的效率问题。

字节码对象的理解

五迷三道 提交于 2020-01-30 17:59:31
Class是把所有类封装为一个Class 类,一个个.class文件就是一个Class对象。 搞清楚万物皆对象,类也可以是对象。 你写的一个类例如是Person,那么字节码就是这个类的另一种存在形式 因为jvm不能直接运行你写的类 所以需要转换 ,就好像你是人 ,你如果想飞,就把你变成鸟,这样你以鸟的状态存在 就可以飞了 ,字节码就是这样 把你写的这个类以字节码的形式扔给jvm 让他去运行,所以这个字节码就是类 。 这个面向对象 ,就跟修仙一样,java之父说:啊 ,一切***是对象。我们只能说:你说的都对,然后java之父就跟上帝似的创造了一个jvm虚拟机来作为所有产生对象的马达。 对象在类中产生,那么类(字节码,在虚拟机中就叫字节码)在哪产生呢。答案是java中的Class(java.lang.Class) . 那么在装进虚拟机的时候 这时候的类就叫字节码了 这些个字节码***归属于这个Class ,是他的对象,所以我们就叫这个时候字节码是字节码对象 来源: CSDN 作者: __MAC 链接: https://blog.csdn.net/weixin_46209120/article/details/104114992