
JVM
文章平均质量分 90
JVM
猎人在吃肉
这个作者很懒,什么都没留下…
展开
-
Java 类中各员 的加载顺序 和 内存中的存放位置
在Person.class文件加载时,静态方法和非静态方法都会加载到方法区中,只不过要调用到非静态方法时需要先实例化一个对象,对象才能调用非静态方法。如果让类中所有的非静态方法都随着对象的实例化而建立一次,那么会大量消耗内存资源,所以才会让所有对象共享这些非静态方法,然后用this关键字指向调用非静态方法的对象。加载类文件时,除了非静态成员变量(对象的特有属性)不会被加载,其它的都会被加载。注意:要想使用类中的成员,必须调用。构造函数: 给对应对象初始化的,建立对象时,选择相应的构造函数初始化对象。转载 2024-02-20 11:36:17 · 594 阅读 · 0 评论 -
java 虚拟机 JVM 内存模型(JDK8)
此后经过分析指令,执行指令。如果Java堆中的内存并不是规整的,已使用的内存和空 闲的内存相互交错,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例, 并更新列表上的记录。如果Java堆中的内存并不是规整的,已使用的内存和空闲的内存相互交错,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例, 并更新列表上的记录。转载 2023-02-24 10:42:16 · 4641 阅读 · 0 评论 -
jvm 的 解释执行与 编译执行
1、原理字节码无法直接交给硬件执行需要虚拟机 翻译 成 机器码 才能执行,“翻译”的策略有两种:解释执行 和 编译执行 ,又称 即时编译(JIT)。解释执行,以解释方式运行字节码,解释执行的意思是 读一句,执行一句。优点是 启动效率快,缺点是 整体的执行速度较慢。编译执行,将字节码编译成机器码直接执行机器码运行时编译编译后,性能有数量级的提升。其特点与解释执行相反,启动较慢,执行较快。在jvm虚拟机中是两者混合出现,既有解释执行也有编译执行。首先是 解释执行,一转载 2022-01-05 14:39:49 · 1128 阅读 · 0 评论 -
java 的volatile 关键字
一、前言学习 volatile 之前,必须先了解 Java的内存模型( Java Memory Model,简称 JMM )以及其 可见性、原子性 和 有序性。二、Java内存模型的3个特性1)可见性:可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用 同步机制。可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。 也就是转载 2020-07-27 14:03:38 · 309 阅读 · 0 评论 -
Java 强引用、软引用、弱引用、虚引用
1、杂谈在Java中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了。从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。2、详解转载 2020-07-21 16:04:57 · 318 阅读 · 0 评论 -
JVM ,类的加载过程中,init 和 clinit 区别
文章目录1、init 和 clinit 区别1)执行时机不同2)执行目的不同2、clinit 说明3、示例解析:运行结果:1、init 和 clinit 区别1)执行时机不同init 是对象构造器方法,程序执行 new 一个对象调用该对象类的 constructor 方法时才会执行 init 方法,clinit 是类构造器方法, jvm 进行类的加载 —–> 验证 —-> 解析 —–> 初始化 ,其中,初始化阶段,jvm会调用 clinit 方法。2)执行目的不同init 是转载 2020-07-19 11:05:55 · 1106 阅读 · 0 评论 -
JVM虚拟机参数配置官方链接
一、虚拟机参数设置文档1.1、官方文档http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.htmlhttp://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html1.2、非官方文档http://www.jvmer.com/jvm-xx-%E5%8F%82%E6%95%B0%E4%BB%8B%E7%BB%8D/http://q-redux转载 2020-07-05 14:00:24 · 485 阅读 · 0 评论 -
java 虚拟机( jvm ) 的垃圾收集器的发展史
有了虚拟机,就一定需要收集垃圾的机制,这就是Garbage Collection ,对应的产品我们称为 Garbage Collector 。1999年,随JDK 1.3.1 一起来的是串行方式的 Serial GC ,它是第一款GC。ParNew GC 是 Serial GC 的多线程版本。2020年2月26日,Parallel GC 和 Concurrent Mark Sweep GC( 即 CMS ) 跟随 JDK1.4.2 一起发布。Parallel GC 在 JDK6 之后成为 Hotsp转载 2020-06-11 13:27:53 · 1002 阅读 · 0 评论 -
jvm 参数 -verbose:gc 和 -XX:+PrintGC 的区别?
文章目录一、日志内容1.1、 `-verbose:gc` 参数:1.2、 `-XX:+PrintGC` 参数:二、官方说明2.1、`-verbose:gc` 是 稳定版本2.2、`-XX:+PrintGC` 是 非稳定版本转载:在jvm调优时,参数 -verbose:gc 和 -XX:+PrintGC 有什么具体的区别?还是说效果一样的,打印下了没发现什么差别。一、日志内容1.1、 -verbose:gc 参数:-verbose:gc-XX:+PrintGCDetails-XX:+PrintG转载 2020-06-10 19:07:57 · 3689 阅读 · 0 评论 -
java jvm 内存溢出和内存泄漏的区别
文章目录一、概念的区分二、内存溢出的原因以及解决方法2.1、内存溢出的原因2.2、内存溢出的解决方案:三、内存泄漏3.1、内存泄漏的分类:3.2、内存泄漏的危害一、概念的区分内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现 out of memory 。 比如申请了一个integer, 但给它存了long才能存下的数,那就是内存溢出。内存泄露 memory leak ,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内转载 2020-06-08 22:57:31 · 3113 阅读 · 0 评论 -
jdk8 jvisualvm 插件安装报错
1、问题使用JDK8下的 jvisualvm.exe 时,会报出如下错误 :2、解决方案2.1、下载插件在打开的页面 https://visualvm.github.io/pluginscenters.html , 找到自己jdk相对应的版本。我的JDK版本是 jdk1.8.0_60, 所以选择下图红框中的链接:进入插件下载页面,选择需要的插件,比如说我下载了红框中的插件。已下载的插件如下:2.2、安装插件在 jvisualvm.exe 添加已下载好的插件选中插件,右键 “原创 2020-06-08 09:40:33 · 2402 阅读 · 1 评论 -
java 面试题: new String() 会创建几个对象?
文章目录题1: new String("ab") 会创建几个对象?题2:new String("a") + new String("b") 会创建几个对象 ?题1: new String(“ab”) 会创建几个对象?public class StringNewTest { public static void main(String[] args) { String str = new String("ab"); }}javap -v StringNewTest.原创 2020-05-28 14:42:11 · 12134 阅读 · 11 评论 -
iconst、bipush、sipush、ldc指令的区别
文章目录1、前言2、iconst3、bipush4、sipush5、ldc转载:1、前言JVM中 int 类型数值,根据 取值范围将 入栈的 字节码指令 就分为4类:取值 -1~5 采用 iconst 指令;取值 -128~127 采用 bipush 指令;取值 -32768~32767 采用 sipush指令;取值 -2147483648~2147483647 采用 ldc 指令。2、iconst当int取值 -1~5 时,JVM采用iconst指令将常量压入栈中。定义 Test.ja转载 2020-05-28 14:02:22 · 5594 阅读 · 2 评论 -
java Stack(虚拟机栈)
文章目录1、Java 虚拟机栈的定义1.1、异常1.2、栈帧(Stack Frame)2、局部变量表(Local Variable Table)2.1、面试题:基本数据和对象引用存储在栈中 ?2.2、静态变量与局部变量的对比2.3、reference(对象实例的引用)2.4、Slot( 变量槽 )2.4.1、Slot 的理解2.4.2、Slot的复用2.5、补充说明3、操作数栈(Operand Stack)3.1、代码追踪3.2、栈顶缓存技术 (Top-of-StackCashing)4、动态链接(Dyn原创 2020-05-20 15:09:19 · 892 阅读 · 0 评论 -
JVM中,-Xms600m -Xmx600m ,在理论情况下,求新生代、老年代的大小 和 eden、survivor区的大小。
JVM中,-Xms600m -Xmx600m ,在默认情况下,求新生代、老年代的大小和 eden、survivor区的大小。这里涉及到两个重要默认参数:-XX:NewRatio=2 、-XX:SurvivorRatio=8 。-XX:NewRatio=2 表示 新生代与老年代的比值是1 :2 。堆的总大小是600M,新生代占1/3,是200M ;老年代占2/3,是400M。-XX:SurvivorRatio=8 表示 新生代中,survivor与eden比值是1:8。新生代中有两个原创 2020-05-15 15:22:05 · 1196 阅读 · 0 评论 -
class常量池、运行时常量池 和 字符串常量池 的区别
文章目录一、概念1、Class 常量池(Class Constant Pool)1.1、常量池中数据项类型2、字符串池(String Pool、String Literal Pool)2.1、参考文章:3、运行时常量池(Runtime Constant Pool)4、总结二、方法区的class文件信息,class常量池和运行时常量池的三者关系2.1、三者关系图:2.2、方法区class文...原创 2020-04-03 20:42:03 · 12529 阅读 · 11 评论 -
Native Method Stack(本地方法栈)
文章目录1、Native Method Stack 的定义2、Native Method Stack 的使用3、Native Method Stack 的异常4、与 JVM Stack(虚拟机栈) 的区别1、Native Method Stack 的定义Native Method Stack (本地方法栈) 是用于管理 Native Method (本地方法)的调用。注: Native ...原创 2020-04-02 15:07:16 · 873 阅读 · 0 评论 -
JVM 的 Native Method (本地方法)
文章目录java 的 native method (本地方法)1、 什么是 native method1.1、native method 的定义1.2、native 与 abstract 的区别1.3、native 与 java 普通方法使用的区别1.4、native method 的返回类型 与 异常二、为什么要使用 native method2.1、与java环境外交互:2.2、与操作系统...转载 2020-04-02 12:05:46 · 2443 阅读 · 0 评论 -
JVM之类的加载过程中的主动使用 和 被动使用
1、主动使用 与 被动使用 的定义主动使用 的7种情况:创建类的实例对象,如 new Person():访问类 (包括接口、抽像类)的静态变量,或者对静态变量赋值;调用类的静态方法;使用 反射 Class.forName("com.test.Test") ,对类进行反射调用的时,如果类没进行初始化,需要先调用其初始化方法进行初始化。当初始化一个类时,如果其父类还未进行初始化,会先触发...原创 2020-03-28 21:14:53 · 721 阅读 · 0 评论 -
单例模式(Singleton Pattern)之静态内部类
文章目录1、代码2、静态内部类的优点:3、静态内部类又是如何实现线程安全4、静态内部类的缺点1、代码public class SingleTon { //外部类 private SingleTon(){} private static class SingleTonHolder { //静态内部类 private static SingleTon INSTA...转载 2020-02-27 11:41:22 · 3937 阅读 · 0 评论 -
JVM之类加载的过程(类加载子系统)
类从被加载到虚拟机内存中开始,到卸载出内存,它的生命周期包括 `加载(Loading)`、`验证(Verification)`、`准备(Preparation)`、`解析(Resolution)`、`初始化(Initialization)`、`使用(Using)`和 `卸载(Unloading)` 7个阶段。其中, 验证、准备、解析 3部分称为 `连接(Linking)` 。原创 2018-03-08 09:44:35 · 933 阅读 · 3 评论 -
(图)JVM 之运行时数据区—— 简单、中、详细图
JVM 结构图1 (简单)JVM 结构图2 (中)JVM 结构图3 (详细)原创 2020-02-13 16:47:02 · 280 阅读 · 0 评论 -
JVM之运行时数据区(方法区、堆、运行时常量池、栈、本地方法栈、程序计数器)
程序计数器程序计数器是一块较小的内存空间,他的作用可以看做是当前线程所执行的字节码的行号指示器。程序计数器是可以当做java执行(一个线程)的指示器,执行下一条指令,选择那一条路径,是否循环操作等都是依赖这个指示器来执行的java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间来实现的,在任何一个确定的时刻,一个处理器或内核都只会执行一条线程的指令,因此为了线程能够恢复到正...原创 2018-04-09 07:51:30 · 604 阅读 · 1 评论 -
JVM之 方法区 和 堆 的总结(学习笔记)
1、方法区(Method Area),又称永久代(Permanent Generation),又称非堆区(Non-Heap space)方法区,又称永久代(Permanent Generation),常称为PermGen,位于非堆空间,又称非堆区(Non-Heap space)。方法区是被所有线程共享。所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在此定义。简单说,所有定...原创 2019-02-23 09:19:28 · 6567 阅读 · 4 评论 -
JVM之类的加载过程的应用:Class.forName 和 ClassLoader.loadClass 的区别
1、Class.forName()和ClassLoader.loadClass的比较1.1、 Class.forName(className)其内部实际调用的方法是 Class.forName(className,true,classloader)方法:Class.forName0(String className, boolean initialize, ClassLoader load...原创 2019-02-20 15:37:41 · 3603 阅读 · 0 评论 -
JVM之 方法区、永久代(PermGen space)、元空间(Metaspace)三者的区别
文章目录0、前言(JVM 运行时区域)1、PermGen(永久代)2、Metaspace(元空间)3、总结0、前言(JVM 运行时区域)阅读此文章时,必须已经了解了jvm 运行时数据区域。 根据 JVM 规范,JVM 运行时区域大致分为 方法区、堆、虚拟机栈、本地方法栈、程序计数器 五个部分。1)、方法区方法区是JVM 所有线程共享。主要用于存储类的信息、常量池、方法数据、方法代码等...原创 2020-02-11 18:23:09 · 22630 阅读 · 25 评论 -
JVM之运行时常量池,不同JDK版本中的变化
/** * VM options:-Xms10M -Xmx20M -XX:PermSize=10M -XX:MaxPermSize=10M -XX:-UseGCOverheadLimit */public class JVMTest02 { byte[] byteArray = new byte[1 * 1024 * 1024]; public static void main(St...原创 2019-02-20 17:18:13 · 936 阅读 · 0 评论 -
JVM 垃圾回收之Minor GC、Major GC和Full GC之间的区别
三者负责的区域年轻代 包括 Eden和Survivor区域Minor GC 是 清理 Eden区 ;Major GC 是 清理 老年代 ;Full GC 是 清理整个堆空间,包括 年轻代和老年代。触发机制Minor GC当年轻代(Eden区)满时就会触发 Minor GC,这里的年轻代满指的是 Eden区满。Survivor 满不会引发 GC 。Full GC当年老代满时会...转载 2019-02-20 10:39:23 · 10410 阅读 · 6 评论 -
JVM类加载机制—加载的顺序问题
文章目录1、代码2、运行结果:3、分析:1、代码package com.aop8.classload;public class Demo01 { static { System.out.println("静态代码块Demo01"); } public static void main(String[] args) { System.out.println(&a转载 2019-03-01 16:01:29 · 753 阅读 · 0 评论 -
java获取反射机制的三种方式
java 获取反射机制的三种方式:new对象 实现反射机制路径类名代码示例建立一个学生类:package com.aop8.reflect;public class Student { private int id; String name; protected boolean sex; public float score;}获取反射机制:package com...转载 2019-02-20 14:25:23 · 596 阅读 · 0 评论 -
JVM 学习参考文章
JVM运行原理详解: https://blog.csdn.net/Luomingkui1109/article/details/72820232转载 2019-03-01 16:56:22 · 215 阅读 · 0 评论 -
JVM 博客推荐
JVM 博客推荐https://blog.csdn.net/q5706503/article/category/8511682转载 2019-02-23 09:37:32 · 399 阅读 · 0 评论 -
volatile 关键字
volatile 关键字package com.aop8.testJava;import java.util.concurrent.TimeUnit;/** * 一、volatile 关键字:当多个线程进行操作共享数时,可以保证内存中的数据可见 * */public class TestVolatile { public static void main(S...原创 2018-08-18 10:29:41 · 266 阅读 · 0 评论 -
Java JVM虚拟机学习的经典书籍
1、深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)基于最新JDK1.7,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行全面而深入的分析,深刻揭示JVM的工作原理。以实践为导向,通过大量与实际生产环境相结合的案例展示了解决各种常见JVM问题的技巧和实践2、揭秘Java虚拟机:JVM设计原理与实现《揭秘Java虚拟机:JVM设计原理与实现》从源码角度解...转载 2019-02-20 21:55:47 · 7517 阅读 · 0 评论 -
JDK 监控和故障处理工具
文章目录1、jps: 查看所有 Java 进程2、 jstat 监视虚拟机的运行状态信息3、jinfo 显示虚拟机参数配置信息4、jmap 生成虚拟机的内存转储快照(dump文件)5、jhat 建立一个http/html服务器6、 jstack 显示虚拟机的线程快照7、jcmd java 命令行名称主要作用备注jpsjvm process status tool,显示...转载 2019-08-27 16:06:25 · 737 阅读 · 0 评论 -
JVM之垃圾收集器(适于JDK7及之前)
文章目录一、并行和并发的概念二、垃圾收集器2.1、Serial收集器(新生代 – 串行GC)2.2、ParNew收集器(新生代 – 并行GC)2.3、Parallel Scavenge收集器(新生代 – 并行回收GC)2.4、Serial Old收集器(老年代 – 串行GC)2.5、Parallel Old收集器(老年代 – 并行GC)2.6、CMS收集器(老年代 – 并发GC)2.7、G1收集器...转载 2019-03-03 16:28:09 · 297 阅读 · 0 评论 -
JVM之常用的垃圾收集算法的总结
1、复制算法将可用内存按容量分成大小相等的两块,每次只使用其中一块,当这块内存使用完了,就将还存活的对象复制到另一块内存上去,然后把使用过的内存空间一次清理掉。这样使得每次都是对其中一块内存进行回收,内存分配时不用考虑内存碎片等复杂情况,只需要移动堆顶指针,按顺序分配内存即可,实现简单,运行高效。特点:针对存活率低的对象优点:无内存碎片缺点:可使用的内存降为原来一半2、标记-清除算法最...原创 2019-02-28 23:06:27 · 263 阅读 · 0 评论 -
Java 虚拟机之HotSpot简介
1. HotSpot 简介Java是解释语言,但并不意味着它一定被解释执行。早期的虚拟机确实一条一条指令解释执行,但人们发现这样效率太低,不满足各种要求,因此出现了许多其它虚拟机,如JIT的虚拟机。 HotSpot也是类似一种虚拟机,自从SUN买下后,已经把它放入JRE 1.3以及后续版本中。 Oracle公司的java1.7使用的也是HotSpot虚拟机。不同厂商之间的java虚拟机是不...转载 2018-04-06 16:35:04 · 1706 阅读 · 0 评论 -
JVM 相关的面试题
请谈谈你对JVM的理解? java8的虚拟机有什么更新?什么是OOM ? 什么是StackOverflowError ? 有哪些方法分析?JVM的常用参数调优,你知道哪些?内存快照抓取和MAT分析DUMP文件知道吗?谈谈JVM中,对类加载器你的认识?...转载 2019-02-18 11:18:00 · 432 阅读 · 0 评论 -
《深入理解java虚拟机》 精华总结(面试)
文章目录一、运行时数据区域1.1 程序计数器1.2 Java虚拟机栈1.3 本地方法栈1.4 Java堆1.5 方法区1.6 运行时常量池二、hotspot虚拟机对象2.1 对象的创建2.2 对象的内存布局2.3 对象的访问定位三、OutOfMemoryError 异常3.1 Java堆溢出3.2 虚拟机栈和本地方法栈溢出3.3 方法区和运行时常量池溢出四、垃圾收集1.判断对象存活2.引用3.Fi...转载 2018-11-09 18:25:01 · 401 阅读 · 0 评论