
jvm
jvm
土拨鼠饲养员
这个作者很懒,什么都没留下…
展开
-
jvm-10 垃圾回收3-垃圾回收器
GC的分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。按线程数分,可以分为串行垃圾回收器和并行垃圾回收器串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场 合,串行回收器的性能表现可以超原创 2020-07-18 11:44:57 · 345 阅读 · 0 评论 -
jvm-09垃圾回收2-垃圾回收相关概念
System.gc()的理解在默认情况下,通过System.gc ()或者Runtime . getRuntime() .gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(无法保证马上触发GC)。JVM实现者可以通过system.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况下,如我们正在编写一个原创 2020-07-15 20:15:27 · 141 阅读 · 0 评论 -
jvm-08垃圾回收1概述+算法
什么是垃圾( Garbage) 呢?➢垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。➢外文: An object is considered garbage when it can no longer be reached from any pointer in the runningprogram.如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空 间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。垃圾收集,不是Jav..原创 2020-07-15 12:29:21 · 359 阅读 · 0 评论 -
jvm-07字符串常量池StringTable
1.String的基本特性String:字符串,使用一对""引起来表示。String sl = “hello”;//字面量的定义方式String s2 = new String(“hello”) ;String声明为final的, 不可被继承String实现了Serializable接口:表示字符串是支持序列化的。 实现了Comparable接口:表示String可以比较大小String在jdk8及以前内部定义了final char[],value用于存储字符串数据。jdk9时改为fin原创 2020-07-13 21:43:02 · 423 阅读 · 0 评论 -
jvm-06执行引擎
执行引擎概述执行引擎是Java虚拟机的核心组成部分之一虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM锁识别的字节码原创 2020-07-12 22:03:26 · 148 阅读 · 0 评论 -
jvm-05对象实例化内存布局与访问定位&直接内存
1.1 创建对象的方式new最常见的方式变形1 : Xxx的静态方法变形2 : XxBuilder/XxxFactory的静态方法Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是publicConstructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构造器,权限没有要求使用clone() :不调用任何构造器,当前类需要实现Cloneable接口,实现clone()使用反序列化:从文件中、从网络中获取一个对象的二进...原创 2020-07-12 22:02:56 · 224 阅读 · 0 评论 -
jvm-04运行时数据区(方法区)
1. 堆、栈、方法区的交互关系运行时数据区结构图堆、栈、方法区的交互关系2. 方法区的理解《Java虚拟机规范》中明确说明:‘尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。’但对于HotSpotJVM而言,方法区还有一个别名叫做Non-heap(非堆),目的就是要和堆分开。 所以,方法区可以看作是一块独立于Java堆的内存空间。方法区(Method Area)与Java堆一样,是各个线程共享的内存区域方法区在JVM启动时就会被创建,并且它原创 2020-07-12 22:02:18 · 296 阅读 · 1 评论 -
jvm-03运行时数据区(堆)
堆1.核心概述一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器、本地方法栈和虚拟机栈。一个jvm实例只存在一个堆内存,堆也是java内存管理的核心区域Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间(堆内存的大小是可以调节的)《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的所有的线程共享java堆,在这里还可以划分线程私有的缓冲区(TLAB:T原创 2020-07-12 22:01:37 · 385 阅读 · 0 评论 -
jvm-02运行时输据区(程序计数器&虚拟机栈&本地方法栈)
内存与线程01 内存内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区)(图源阿里)JDK8的元数据区+JIT编译产物 就是JDK8以前的方法区(JIT就是编译出来的东西 绝对不在堆里)02 分区介绍java虚拟机定了了若干种程序运行期间会使用到的运行时数据区,其中有一些会原创 2020-07-12 22:00:55 · 417 阅读 · 0 评论 -
jvm-01类加载子系统
JVM与JAVA体系结构JVM是运行在操作系统之上的,并没有和硬件有直接的交互Java一次编译,到处运行JVM整体结构1.方法区和堆区是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私有的内存区域。2.Java栈又叫做jvm虚拟机栈3.方法区(永久代)在jdk8中又叫做元空间Metaspace方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(JIT编译器,英文写作Just-In-Time Compiler)编译后的代码等数据。虽然Java原创 2020-07-12 21:27:21 · 196 阅读 · 1 评论