关于Java杂项知识总结
- 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杂项知识总结的更多相关文章
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
- Java基础知识系列——String
最近晚上没有什么事(主要是不加班有单身),就复习了一下Java的基础知识.我复习Java基础知识主要是依据Java API和The Java™ Tutorials. 今天是第一篇,复习了一下Strin ...
- 学习Spring必学的Java基础知识
[1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http: ...
- 学习android学习必备的java基础知识--四大内部类
学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- java基础知识梳理
java基础知识梳理 1 基本数据类型
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- java基础理论知识的一些总结
在学习Java初期,由于我们是刚开始接触Java,我们不仅需要牢牢掌握Java的基础理论知识,来为我们后面对Java更深层次的学习打好基础,而且我们需要养成编程人的思想习惯.来我们一起来探索Java基 ...
随机推荐
- POJ 1035:Spell checker
Spell checker Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 22574 Accepted: 8231 De ...
- CSS行间样式与内部样式
注释 <!-- --> 快捷键 crtl+/ div 双标签<div></div> CSS语法 属性名:属性值: Css引入方式 1.行间样式的引入:在标签中 ...
- java课程之团队开发冲刺阶段1.8
一.总结昨天进度 1.实现预装sqlite数据库,将数据库放在app的assets目录下,该目录在打包的时候不会压缩,所以数据库文件可以在安装之后继续使用,然后APP安装之后检测外部存储空间是否有这个 ...
- nodejs(6)express学习
1.简单认识express express::一个快速的网站开发框架,封装了原生的http模块,用起来更方便:API更人性化 特点 基于Node.js平台之上,进一步封装了 http 模块,从而提供了 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL UNION 操作符
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中.多个 SELECT 语句会删除重复的数据. 语法 MySQL UNION 操作符语法格式: SELECT ...
- [ZJCTF 2019]NiZhuanSiWei
0x00知识点 1:data伪协议写入文件 2:php:// php://filter用于读取源码 php://input用于执行php代码 3反序列化 0x01解题 打开题目,给了我们源码 < ...
- 数据处理pandas
1.缺失值时间戳不为NaN,为NaT, 同样判断都为isna()或notna()方法2.删值\去重 df.dropna() df.drop_duplicates() 3.上下值插值 df.fillna ...
- POJ - 1061 扩展欧几里德算法+求最小正整数解
//#pragma comment(linker, "/STACK:1024000000,1024000000") //#pragma GCC optimize(2) #inclu ...
- JAVA初学者——DOS命令及基本数据类型
Hello!大家好!我是浩宇大熊猫~ 昨天看了韩顺平老师第二节视频的课,记忆尤新的是那个数据类型那一块,可是昨天感觉没掌握就没有发博客. 今天,又看了一遍,加上看了一些其他老师的,有所收获,所以分享给 ...
- java IO流的概念与分类
DataInputStream && ObjectInputStream 示例 https://blog.csdn.net/hoho_12/article/details/520543 ...