关于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基 ...
随机推荐
- python中的with用法
with是从Python2.5引入的一个新的语法,它是一种上下文管理协议,目的在于从流程图中把 try,except 和finally 关键字和 资源分配释放相关代码统统去掉,简化try….excep ...
- 洛谷 P2719 搞笑世界杯
题目传送门 解题思路: f[i][j]表示买i张A票,j张B票的概率. AC代码: #include<iostream> #include<cstdio> using name ...
- Teamviewer 退出时设置不锁屏
在pc端teamviewer登录同伴的机器时,页面最上端会出现一个工具栏,如图: 点击"动作" ---〉"锁定" 取消打钩 "在会话结束时锁定&qu ...
- 实验吧web--易--后台登陆
题目地址:http://www.shiyanbar.com/ctf/2036 这道题确实有点考研脑洞了. 1.首先,查看网页源代码(Ctrl+U),会发现一段PHP代码: $sql = "S ...
- 201771010123汪慧和《面向对象程序设计JAVA》第八周实验总结
一.理论部分 1.接口 用interface声明,是抽象方法和常量值定义的集 合.从本质上讲,接口是一种特殊的抽象类. 在Java程序设计语言中,接口不是类,而是对类 的一组需求描述,由常量和一组抽象 ...
- try{}catch{}finally{}使用总结
import java.util.Scanner; class MyException extends Exception { public MyException(String Message) { ...
- Thread--线程间通信--管道
在Java语言中提供了各种各样的输入/输出流Stream,使我们能够方便的对数据进行操作,其中管道流是一种特殊的流,用于在不同线程间直接传送数据.一个线程发送数据到输出管道,另一个线程从输入管道中读数 ...
- JavaScript—面向对象 贪吃蛇_2 食物对象
食物对象 //自调用 (function (){ function Food(element) { this.width = 20 this.height = 20 this.backgroundCo ...
- cuda cudaTextureFilterMode
cudaFilterModePoint:点模式,返回最接近的一个点,即最近邻插值.插值公式 tex(x) = T(i),i=floor(x),注意是对坐标向下取整,所以一般对输入坐标值+0.5,避免无 ...
- 6.react 基础 - 关于 react 开发 的原则
1. 声明式开发 通过绑定元素 在数据变更时 对元素进行动态渲染 2. 可以与其他框架并存 不在React的绑定元素内, 可以使用其他框架 如 ( vue jQuery 等 ) 进行元素操作 3. 组 ...