• JVM内存结构

  JVM在运行时把从操作系统申请到的内存分为若干区域,主要有栈、堆和方法区,方便Java程序使用

堆内存

使用new关键字创建出来的对象都存储在堆内存中

方法区

被加载的类的信息存储在方法区中,包括类声明、字段、方法等信息

栈内存

其实Java程序中的每个线程都有自己的栈内存

栈内存用来存储方法执行时创建的局部变量

方法每执行一次,就会在栈内存中开辟一块内存空间,称为栈帧,方法执行结束后,这个栈帧随即被销毁回收

public class Test1 {
public static void main(String[] args) {
int age1 = 16;
Dog dog1 = new Dog();
User user1 = new User();
user1.setAge(age1);
user1.setDog(dog1);
}
}
class Dog {
}
class User {
private int age;
private Dog dog;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
}

  • 常量池

  用来把一些常用对象缓存起来,以便重复使用。包括[-128,127]范围内的整形基本类型包装类的对象(如Byte、Short、Integer等),和以 "xx" 形式出现的String对象(称为字面量)JVM在启动时就会创建这些整形对象并保存在常量池中,在加载类时会把类中的String字面量保存在常量池中

  •  垃圾回收

  当存储在堆内存中的对象不能再被程序使用时(比如已经没有变量指向这个对象),在某个时刻就会被垃圾回收器回收。

  JVM会使用一个单独的线程不定时的执行垃圾回收,垃圾回收器一般从若干个根对象开始遍历并标记遍历到的对象,那些最终也没被标记的对象就会被垃圾回收器回收

  开发人员也可以使用System.gc();方法“催促”垃圾回收器进行回收,但不能保证立即回收

  • 类加载

  当Java程序中需要用到一个类时,JVM的类加载器就会找到这个类并把该类加载到内存中,整个加载过程分为多个阶段,其中三个阶段如下:

  加载阶段

  根据全限定类名找到类的.class文件并加载到方法区内存中,同时在堆内存中生成一个java.lang.Class对象来表示这个类

  准备阶段

  在方法区内为静态变量分配内存,这个时候静态变量的值是其类型的初始值,比如int类型的初始值为0

  初始化阶段

  按出现顺序把静态变量赋值语句和静态代码块合并成<clinit>()方法,然后执行此方法,以便给静态变量赋值和执行静态代码块。另外,如果一个类有父类,则父类的初始化阶段先执行

  另外,使用new调用构造函数创建对象时,会按出现顺序把类的非静态字段赋值语句、非静态代码块,连同放在最后被调用的构造函数一起合并成<init>()方法,执行此方法完成对象的创建

关于Java杂项知识总结的更多相关文章

  1. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  2. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  3. Java基础知识系列——String

    最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...

  4. 学习Spring必学的Java基础知识

    [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http: ...

  5. 学习android学习必备的java基础知识--四大内部类

    学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...

  6. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

  7. java基础知识梳理

    java基础知识梳理 1 基本数据类型

  8. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  9. java基础理论知识的一些总结

    在学习Java初期,由于我们是刚开始接触Java,我们不仅需要牢牢掌握Java的基础理论知识,来为我们后面对Java更深层次的学习打好基础,而且我们需要养成编程人的思想习惯.来我们一起来探索Java基 ...

随机推荐

  1. POJ 1125:Stockbroker Grapevine

    Stockbroker Grapevine Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %I64d & %I64 ...

  2. tensorflow---darknet53

    #! /usr/bin/env python# coding=utf-8#=============================================================== ...

  3. h5-任意元素居中

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. python交互图

    花了时间, 记录一下 # -*- coding:utf-8 -*- import matplotlib.pyplot as plt from matplotlib.patches import Rec ...

  5. NFS工作原理简述

    1.首先用户访问网站程序,由程序在NFS客户端发出存取NFS文件的请求,NFS客户端上的RPC服务通过网络向NFS服务器的RPC服务的111端口发出NFS文件存取的询问请求. 2.NFS服务器的RPC ...

  6. Python D9 学习

    Python 设置环境 当安装好Python 后 在计算机的属性里面   高级语言设置  环境变量. 环境变量里面的path  更改为Python的 树目录  可以从计算机直接下达命令 打开Pytho ...

  7. 第22章 Makefile基础

    一.自动处理头文件的依赖关系 在Makefile中插入如下代码: include $(sources:.c=.d) %.d: %.c set -e; rm -f $@; \ $(CC) -MM $(C ...

  8. 京东云数据库 RDS助力企业便捷运维

    iPhone6发布那年,京东在国贸等商圈送货最快速度数分钟,包括从下单到送达.这是一个极端的富含营销因素例子.即便如此,常态来看,隔天到货的这种业务模式,也是基于同样的支撑:营销业务.物流业务,大数据 ...

  9. C# 基础Array

    一.Array的作用 连续定义多个相同类型的变量,比如我定义1000个学生的学生年龄,int[] age = new int[1000];不需要慢慢的一个一个变量的定义,数组是不是很方便. 需要注意的 ...

  10. c语言中命令行参数argc,argv[]详解

    main(int argc,char *argv[ ]) 1.argc为整数 2.argv为指针的指针(可理解为:char **argv or: char *argv[] or: char argv[ ...