![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
天才小熊猫12138584
这个作者很懒,什么都没留下…
展开
-
JVM 虚拟机中StringTable
String 的基本特性String字符串,使用一对 '" 引起来表示String s1 = “str”; // 字面量的定义方式、String s2 = new String(“hello”);String 声明为 final的 不可以被继承String 实现了 Serializable 接口: 表示字符串是支持序列化的,实现了Comparable 接口,表示String 可以比较大小String 在 jdk 8 级以前内部定义了 final char[] value 用于存储字符串数原创 2020-06-14 21:13:45 · 176 阅读 · 0 评论 -
JVM执行引擎
执行引擎是JAVA虚拟机核心的组成之一虚拟机是一个相对与物理机的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是建立在 处理器, 缓存,指令集和操作系统层面上的,而虚拟机的执行引擎则是有软件自行实现的。因此可以不必受到物理条件制约的定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节玛到其内部,但字节玛并不能直接运行在操作系统之上,因此字节玛指令并非等价于本地机器指令,他包含内部的仅仅只是能够被JVM所识别的字节玛指令, 符号表,以及其他.原创 2020-06-12 13:18:35 · 134 阅读 · 0 评论 -
JVM中直接内存
直接内存概述不是虚拟机运行时数据区的一部分,也不是<Java虚拟机规范>中定义的内存区域直接内存是在JAVA堆外的,直接向系统内存申请的内存区间来源NIO,通过在堆中的DirectByteBuffer操作Native 内存通常,访问直接内存的速度会由于JAVA堆,即读写性能比较高因此处于性能考虑,读写频繁的场景可能会考虑直接使用直接内存JAVA的NIO库允许JAVA程序直接操作本地内存,用于作数据缓冲区。可以通过以下代码测试直接内存private static fina原创 2020-06-07 23:06:00 · 389 阅读 · 0 评论 -
对象的实例化和内存访问定位过程
对象的实例化创建对象的方式:new Object();Class的newInstance()Constructor的newInstance()使用clone使用反序列化第三方Objeneis创建对象的步骤判断对象对应的类是否被加载,链接,初始化虚拟机遇到一条new指令,首先去检查这个指令的参数能否在MetaSpace的常量池中定位到一个类的符号引用,并且检查这个符号引用的类是否已经被加载,解析和初始化,即判断这个类的原信息是否存在,如果没有,那么在双亲委派机制下,使用当前类加原创 2020-06-07 21:51:02 · 148 阅读 · 0 评论 -
JVM虚拟机中 方法区
堆栈和方法区的交互关系从线程是否共享的角度来看方法区在哪里?Java 虚拟机规范中明确说明: 尽管所有的方法区在逻辑上是属于堆的一部分,但是一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。 但是对于HotSpotJVM而言,方法区还有一个别名叫做 Non-Heap (非堆),目的就是要和堆分开方法区的基本理解方法区(Method Area) 与Java 堆一样,是各个线程共享的内存区域方法区在JVM启动的时候被创建,并且他的实际物理内存和JAVA堆区一样都可以是不连续的方法区的大小原创 2020-06-05 21:16:21 · 234 阅读 · 0 评论 -
JVM虚拟机运行时数据区-堆空间
堆的核心概述一个JVM实例只有一个堆内存,堆也是Java内存管理的核心区域Java堆着Jvm 启动的时候就会被创建,其空间大小就确定了。是JVM管理的最大的一块内存空间堆内存的大小是可以调节的 -Xms10m -Xmx20m 最启动初始化内存。 启动时最大内存<Java 虚拟机规范中>堆的核心概述: 内存细分现代垃圾收集器大部分都基于分代收集理论设计, 堆空间细分为:Java 7 及以前堆内存逻辑上分为三部分: 新生区 + 养老区 + 永久代Young Genera原创 2020-06-05 20:54:50 · 279 阅读 · 0 评论 -
JVM本地方法栈
什么是本地方法简单的讲, 一个 Native Method 就是一个 java 调用非Java 代码的接口。 一个Native Method 是这样一个方法,该方法的实现由非 Java 的语言实现的。比如 C, 这个这个特征并非JAVA所特有。很多其他的编程语言都有这样的机制,比如在C++中,你可以使用 extern “C” 告知C++去调用一个C的函数。在定义一个 native method 时,并不提供实现体,(有些像定义一个JAVA interface ), 因为其实现体石油非JAVA语言在外面实原创 2020-06-05 20:46:54 · 247 阅读 · 0 评论 -
JVM运行时数据区-栈空间
HotSpot JVM(红色的为线程共享,黑色的为线程私有)JVM内存布局规定了Java在运行过程中内存申请,分配,管理的策略,保证了JVM的高效稳定运行。 不同的JVM对于内存的划分方式和管理机制存在着部分差异。JAVA虚拟机中定义了若干种程序运行期间会使用道德运行时数据区,其中有一些会随着虚拟机启动而创建, 随着虚拟机退出而销毁,另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁灰色的为线程私有的, 红色为多个线程共享的每个线程,独立包括程序计数器,栈原创 2020-06-05 20:44:54 · 262 阅读 · 0 评论 -
JVM 方法的调用
方法的调用在JVM中,将符号引用转换为调用方法的直接引用与方法的绑定机制有关。静态链接:当一个字节码文件被转载进JVM内部时,如果被调用的目标方法在编译器可知,且运行期保持不变时,这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态链接。动态链接如果被调用的方法在编译期间无法被确定下来,也就是说,只能够在程序运行期将调用方法的符号引用转换为直接引用,由于这种引用转换过程具备动态性,因此也被称之为动态链接。对应的方法的绑定机制为:早期绑定(Early Binding) 和晚原创 2020-06-05 20:42:21 · 161 阅读 · 0 评论 -
JVM虚拟机之类的加载器以及类的加载过程
类加载器子系统作用类加载器子系统负责从文件系统中或者网络中加Class文件,class文件在文件开头有特殊的文件标识,ClassLoader 只负责 class文件的加载,至于它是否可以运行,则有 Execution 执行引擎来决定。加载的类信息存放于一块成为方法去的内存空间,除了类的信息, 方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量, (这部分常量信息是Class...原创 2020-05-06 08:43:38 · 240 阅读 · 0 评论