引自《深入理解Java 虚拟机》 前言 JVM 运行时数据分为几大部分 1. 程序计数器 2. Java 虚拟机栈 3. 本地方法栈 4. Java 堆 5. 方法区(永久代) 6. 运行时常量池 7. 直接内存 JVM 内存区域 Java 虚拟机在执行Java 程序的过程中会把它所管理的内存划分为 ...
分类:
其他好文 时间:
2018-05-20 00:15:24
阅读次数:
216
JVM主要包括四个部分: 内存区包括四个部分: 1.方法区:包含了静态变量、常量池、构造函数等 2.Java堆:java实例或者是对象 3.Java栈:java栈总是和线程关联在一起,每当创建一个线程时,JVM就会为这个线程创建一个对应的java栈。在这个java栈中又会包含多个栈帧,每运行一个方法 ...
分类:
其他好文 时间:
2018-05-16 20:46:07
阅读次数:
136
JVM的内存区域模型 1、方法区 也称永久代、非堆。 用于存储虚拟机加载的类信息、常量、静态变量,是各个线程共享的内存区域。 默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize和-XX:MaxPermSize参数设置其大小。 运行时常量池是方法区的一部分,class文件中除了有 ...
分类:
其他好文 时间:
2018-05-08 16:30:03
阅读次数:
142
Java内存结构,分区,每个区放置什么 程序计数器:(线程私有)当前线程所执行的字节码的行号指示器,通过改变这个计数器的值来选取下一条需要执行的字节码的指令,以程序中分支、循环和跳转等流程的控制都离不开这个计数器的指示。 虚拟机栈:(线程私有),每个方法在执行时都会创建一个栈桢,用于存储局部变量表、 ...
分类:
编程语言 时间:
2018-05-06 13:28:41
阅读次数:
152
对象的创建过程: 当虚拟机遇到一条含有new的指令时,会进行一系列对象创建的操作: 1、检查常量池中是否有即将要创建的这个对象所属类的引用; (1)若常量池中有没有这个类的符号引用,说明这个类还没有被定义!抛出ClassNotFoundException; (2)若常量池中有这个类的符号引用,则进行 ...
分类:
其他好文 时间:
2018-05-03 15:21:09
阅读次数:
168
package com.HelloWorld;/*String str1= "hello", String str2="he"+"llo";之所以str1==str2返回true是因为两者都是在字符串常量池中(由于初始化就会在此区域分布内存)而常量池中的有个与栈区类似的特性,就是当str2指向的常量 ...
分类:
其他好文 时间:
2018-04-29 20:34:22
阅读次数:
1532
String常量池:虚拟机必须为每个被装载的类型维护一个常量池,就是该类型用到的常量的一个有序集合,包括直接常量和对其他类型,字段和方法的符号引用。String常量和String对象Stringstr1="abc";//可能会创建一个或者不创建对象,如果"abc"这个字符串在常量池中不存在,就会在常量池中创建一个Strin对象,然后将str1指向这个对象;如
分类:
编程语言 时间:
2018-04-28 23:53:53
阅读次数:
221
Java是一门面向对象的语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(克隆、反序列化)就是一个new关键字而已,但是虚拟机层面上却不是如此。我们看一下在虚拟机层面上创建对象的步骤: (1)虚拟机遇到一条new指令,首先去检查这个指令的参数能否在常量池中定位到一个类的 ...
分类:
编程语言 时间:
2018-04-27 15:52:15
阅读次数:
138
一、String字符串 问:笔试题:new String("abc")创建了几个对象?答:两个对象,一个对象是 位于堆内存,一个对象位于字符串常量池 结论: 1)对于==: 如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; 如果作用于引用类型的变量,则比较的是所指向的对象的地址2) ...
分类:
编程语言 时间:
2018-04-26 01:09:21
阅读次数:
218
八种基本数据类型的大小,以及他们的封装类 引用数据类型 Switch能否用string做参数 equals与==的区别 自动装箱,常量池 Object有哪些公用方法 Java的四种引用,强弱软虚,用到的场景 Hashcode的作用 HashMap的hashcode的作用 为什么重载hashCode方 ...
分类:
编程语言 时间:
2018-04-25 12:12:47
阅读次数:
253