这一节打算从“方法调用”的主题进行分析。 方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不设计方法内部的具体运行过程。 一、概念 解析调用:所有方法调用中的目标方法在Class文件里都是一个常量池中的引用,在类加载的解析阶段,会将其中一部分符号 ...
分类:
编程语言 时间:
2019-08-21 00:35:51
阅读次数:
118
1.什么是变量,什么是常量?java的基本数据类型是什么 变量: 会发生改变的数据,叫做变量,如自定义一个a,并且对a进行赋值操作为1,也可以让a等于2,此时a就是一个变量 常量: 不会发生改变的值,如上面的1、2 都存储在常量池中。 基本数据类型: 此外,像接口、枚举、String、数组均属于引用 ...
分类:
编程语言 时间:
2019-08-20 18:52:40
阅读次数:
86
1. 对象的创建 1. 遇到 new 指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,执行相应的类加载。 2. 类加载检查通过之后,为新对象分配内存(内存大小在类加载完成后便可确认)。在堆的空闲内存中划分一块 ...
分类:
其他好文 时间:
2019-08-14 14:35:42
阅读次数:
84
在翻《深入理解Java虚拟机》的书时,又看到了2-7的 String.intern()返回引用的测试。 其实要搞明白String.intern(),我总结了下面几条规则: 一、new String都是在堆上创建字符串对象。当调用 intern() 方法时,编译器会将字符串添加到常量池中(string ...
分类:
其他好文 时间:
2019-08-13 20:13:00
阅读次数:
83
本文转自:https://www.jianshu.com/p/d2d806ca7859 1.对象的创建 虚拟机接收到new指令时,检查这个指令能否在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化。如果都没有,先执行类加载过程。 在类加载通过后,虚拟机为新对象分 ...
分类:
其他好文 时间:
2019-08-13 13:50:42
阅读次数:
72
Java虚拟机运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图: ...
分类:
编程语言 时间:
2019-08-02 00:08:41
阅读次数:
111
总结工作中遇到的JVM知识 不定期更新 1.有关创建字符串时到底创建几个对象,创建的字符串引用比较。 ...
分类:
其他好文 时间:
2019-07-30 15:42:23
阅读次数:
66
最近见的一个选择道题 刚学习一直认为final修饰,为常量,必须声明时被初始化,现在又明白第二种情况可以通过创建对象之后由构造方法立即初始化。 常量是在常量池,在类编译阶段进入常量池。 常量池好处:避免频繁的创建和销毁对象而影响系统性能,实现了对象的共享。在编译阶段就把所有的字符串文字放到一个常量池 ...
分类:
其他好文 时间:
2019-07-23 21:19:52
阅读次数:
136
程序计数器 记录字节码指令地址,占用空间很小,基本无异常抛出 本地方法栈 native方法区 方法区 所有线程共享,主要存储类的信息,常量池,方法数据,方法代码。 堆内存 JVM所有线程共享,所有对象和数组都在堆上进行分配,这部分内存可通过GC回收,申请不到内存空间会抛出 虚拟机栈 线程私有,随线程 ...
分类:
其他好文 时间:
2019-07-23 14:58:59
阅读次数:
84
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域, 包含程序计数器、虚拟机栈、本地方法栈、Java堆、方法区(运行时常量池)、直接内存等,不同的版本会有所差异 各区域的作用: 1、程序计数器:较小的内存空间,当前线程执行的字节码的行号指示器;各线程之间独立存储,互 ...
分类:
其他好文 时间:
2019-07-21 01:37:45
阅读次数:
92