jvm

JVM系列--01JDK/JRE/JVM之间的关系

佐手、 提交于 2020-02-04 05:11:29
JVM系列--01JDK/JRE/JVM之间的关系 JVM :Java Virtual Machine(Java虚拟机),包含了Java最核心的类库。 JRE :java runtime environment (java运行环境),包含了JVM和一些常见的Java运行类库,即JRE=JVM+常见运行类库。最大特点:安装了JRE之后,只能运行java程序,但不能开发java程序。因为JRE中没有包含开发者编译Java的相关工具。安装好的JRE文件夹内包含bin和lib两个文件夹,其中bin就是JVM,lib是Java核心类库。 JDK :java development kit (Java 开发工具),包含了JRE和Java开发工具,即JDK=JRE+java开发工具。安装了jdk后,既能运行JAVA程序,又能开发。 以下是官方提供的图 从包含的角度上讲,三者就是JDK包含JRE,JRE包含JVM。 来源: CSDN 作者: 更新失败 链接: https://blog.csdn.net/u011552171/article/details/104157232

JVM系列(二)——Jvm内存结构

醉酒当歌 提交于 2020-02-04 04:01:06
    JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块,由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配;方法区存储类信息、常量、静态变量等数据,是线程共享的区域,为与Java堆区分,方法区还有一个别名Non-Heap(非堆);栈又分为java虚拟机栈和本地方法栈主要用于方法的执行。     如何通过参数来控制各区域的内存大小呢? 控制参数 -Xms设置堆的最小空间大小。 -Xmx设置堆的最大空间大小。 -XX:NewSize设置新生代最小空间大小。 -XX:MaxNewSize设置新生代最大空间大小。 -XX:PermSize设置永久代最小空间大小。 -XX:MaxPermSize设置永久代最大空间大小。 -Xss设置每个线程的堆栈大小。 没有直接设置老年代的参数,但是可以设置堆空间大小和新生代空间大小两个参数来间接控制。 老年代空间大小=堆空间大小-年轻代大空间大小     JVM和系统调用之间的关系: 1.Java堆(Heap)     对于大多数应用来说,Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例

JVM学习之部分源码分析

独自空忆成欢 提交于 2020-02-04 02:38:17
1.获取类加载器(ClassLoaer)的途径 ClassLoader loader = 对象.getClassLoader();获取当前类的ClassLoader ClassLoader loader = Thread.currentThread().getContextClassLoader();获取当前线程上下文的ClassLoader ClassLoader loader = ClassLoader.getSystemClassLoader();获取系统的ClassLoader ClassLoader loader = DriverManager.getCallerClassLoader();获取调用者的ClassLoader 2.ClassLoader源码内容: 例题: public class JVMTest1{ public static void main(String args[]) throws Exception{ String[] string = new String[2]; System.out.println(string.getClass().getClassLoader()); System.out.println("---------"); JVMTest1[] test = new JVMTest1[2]; System.out.println

关于jvm中的常量池和String.intern()理解

[亡魂溺海] 提交于 2020-02-04 01:55:34
1. 首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null; 3. String str=”kvill”; String str=new String (“kvill”);的区别: 在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。 常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。 看例1: String s0=”kvill”; String s1=”kvill”; String s2=”kv” + “ill”; System.out.println( s0==s1 ); System.out.println( s0==s2 ); 结果为: true true 首先,我们要知道Java会确保一个字符串常量只有一个拷贝。 因为例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”kv”和”ill”也都是字符串常量,当一个字符串由多个字符串常量连接而成时

深入理解JVM-张龙-P21-P25

隐身守侯 提交于 2020-02-04 00:34:04
打印出类加载器所加载出的路径 系统类加载器打印出的路径在IDEA中好长一段,有的是IdEA自己加上的。如果脱离IDE环境,在命令行中打印系统类加载器的路径,只会输出一个 . 也就是当前路径(class文件所在的文件夹路径) 当我把MyTest1.class文件放入到根类加载器所访问的路径的时候,加载它的类加载器从系统类加载器变成了根类加载器 扩展类加载器的应用,完成加密和解密的 因为扩展类加载器要把类打包成jar才可以加载,这是它与其他类加载器不同的一点 下面可以这样证明,因为ExtClassLoader的声明不是public,所以不能直接来引用。因为它在这个Launcher类中,因此用Launcher来验证 可以改变这个系统属性来改变系统类加载器 修改系统类加载器为自定义的类加载器之后,当前系统类加载器的父类还是默认的系统类加载器哟 来源: CSDN 作者: fsdgfsf 链接: https://blog.csdn.net/fsdgfsf/article/details/104152127

jvm 垃圾收集器分析

岁酱吖の 提交于 2020-02-03 23:21:30
jvm 垃圾收集器分析 jvm 垃圾收集器分析 新生代收集器 老年代收集器 优点 缺点 serial收集器 V 1.jdk1.3开始的单线程收集器 2.client模式下很好的选择。 3.复制算法 1.单线程,收集时需要暂停所有线程(stop the world) parNew收集器 V 1.serial的多线程版 2.server模式下 3.可与CMS收集器工作 4.线程数与cpu数相同 1.单CPU下不会比serial收集器性能好 Parallel Scavenge 收集器 V 1.能达到期望的吞吐量 -XX:MaxGCPauseMilis 停顿时间,-XX:GCTimeRatio设置吞吐量大小。 -XX:UseAdaptiveSizePlicy:GC自适应调节策略。 1.停顿时间减少,gc频率就会加大。 serial Old V 1.单线程和serial组合合用 2.client模式下 3.CMS的后备预案 4.标记整理算法 1.单线程 2.client模式下 parallel Old V 1.Parallel Scavenge 收集器老年版本 2.多线程“标记整理”算法 3.在吞吐量优先和CPU资源敏感的场合下都可以优先考虑用Parallel Scavenge+Parallel Old组合 CMS V 1.并行收集 2.低停顿 1.cpu敏感 2.无法处理浮动垃圾 3.标记

JVM的认识

不问归期 提交于 2020-02-03 22:08:56
一、概念   JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个 虚构出来 的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,Java语言在 不同平台上运行时不需要重新编译 。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。 二、概述 Java虚拟机有自己 完善的硬件架构 ,如处理器、堆栈等,还具有相应的指令系统。 Java虚拟机本质上就是一个 程序 ,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“ 一次编译,多次运行 ”。 Java技术使同一种应用可以运行在不同的平台上。Java平台可分为两部分,即J ava虚拟机 (Java virtual machine,JVM)和 Java API类库 三、体系结构 Java虚拟机主要分为五大模块: 类装载器子系统 、 运行时数据区 、 执行引擎 、 本地方法接口 和 垃圾收集模块。 Java虚拟机不是真实的物理机,它没有寄存器,所以指令集是使用

Java知识之JVM

…衆ロ難τιáo~ 提交于 2020-02-03 21:22:31
类加载器 类装载器ClassLaoder负责加载class文件,class文件开头有特定的文件标识,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则有Execution Engine决定虚拟机自带的类加载器 引导类加载器 这个类加载使用C/C++与亚伯实现的,嵌套在JVM内部,它用来加载Java的核心库(JAVA_HOME/jre/lib/rt.jar、resources.jar或sun.boot.class.path路径下的内容),用于提供JVM自身需要的类 并不继承自java.lang.ClassLoader,没有父加载器 加载扩展类和应用程序类加载器,并指定未他们的父类加载器,处于安全考虑,Bootstrap启动类加载器只加载包名未java、javax、sun等开头的类 扩展类加载器 Java语言编写 派生于ClassLoader类 父类加载器为启动类加载器 从java.ext.dirs系统属性所指定的目录中加载类库,或从JDK的安装目录的jre/lib/ext,子目录下加载类库。如果用户创建的JAR放在此目录下,也会自动由扩展类加载器加载 应用类加载器 java语言编写 派生于ClassLoader类 父类加载器为扩展类加载器

JVM系列(二)——Jvm内存结构

六月ゝ 毕业季﹏ 提交于 2020-02-03 15:57:31
    JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块,由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配;方法区存储类信息、常量、静态变量等数据,是线程共享的区域,为与Java堆区分,方法区还有一个别名Non-Heap(非堆);栈又分为java虚拟机栈和本地方法栈主要用于方法的执行。     如何通过参数来控制各区域的内存大小呢? 控制参数 -Xms设置堆的最小空间大小。 -Xmx设置堆的最大空间大小。 -XX:NewSize设置新生代最小空间大小。 -XX:MaxNewSize设置新生代最大空间大小。 -XX:PermSize设置永久代最小空间大小。 -XX:MaxPermSize设置永久代最大空间大小。 -Xss设置每个线程的堆栈大小。 没有直接设置老年代的参数,但是可以设置堆空间大小和新生代空间大小两个参数来间接控制。 老年代空间大小=堆空间大小-年轻代大空间大小     JVM和系统调用之间的关系: 1.Java堆(Heap)     对于大多数应用来说,Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例

虚拟机的监控工具

二次信任 提交于 2020-02-03 14:18:24
定位问题,知识储备是基础,日志等数据是依据,工具则是帮助我们事半功倍的手段。 本文是在win下测试,主要介绍一些工具的使用。 1.jps:虚拟机进程状况工具 JVM Process Status Tool 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)。 C:\Users\***\Desktop\64124-深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)_源码>jps -l 39172 sun.tools.jps.Jps 24396 24476 org.jetbrains.jps.cmdline.Launcher 2.jstat:虚拟机统计信息工具 JVM Statistics Monitoring Tool jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程[插图]虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据,在没有GUI图形界面、只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的常用工具。 C:\Users\***\Desktop\64124-深入理解Java虚拟机