写给自己的JAVA工程师之路-基础类库
来源:互联网 发布:java开源社区 编辑:程序博客网 时间:2024/06/01 20:34
1 RUNTIME
在每一个Java进程中都会存在一个runtime类的对象,由于此对象是由java进程自己维护,所以在整个runtime类设计的过程中只为用户提供的唯一的实例化对象,所以这个类使用的是单例模式。
public class demo {public static void main(String[] args) {Runtime run = Runtime.getRuntime(); //取得runtime实例化对象System.out.println("MAX ="+run.maxMemory());//取得最大内存空间System.out.println("TOTAL ="+run.totalMemory());//取得总共可用内存空间System.out.println("FREE ="+run.freeMemory());//取得空闲内存空间}}
JVM内存划分
Java中的内存划分主要有两个组成部分:
堆内存:保存实例化对象的内容,在每一个JVM进程之中,对象的堆内存空间都会由垃圾收集器管理回收问题
非堆内存(Eden + Front space + To space):主要用于产生新的对象;
-| 所有方法的全局区
-| 所有的static的全局数据区
-| 永生代:负责存放反射对象的操作空间
如果要调整内存大小,主要调整的就是堆内存空间,它的调整有三个参数:
"-Xms" : 初始分配大小,最多为物理内存的1/64,最多不超过1G
"-Xmx" : 最大分配内存大小,最多为物理内存的1/4
"-Xmn" : 年轻代堆内存大小
调整内存空间: -Xms1024M -Xmx1024M -Xmn1024M
垃圾回收
新的对象保存在Eden区中,之后此对象保存在年轻代区,而后在进行GC之后,所有被保留下来的年轻代中的对象(从GC,MinorGC)将保存在旧生代(主GC,MajorGC)
如果再有新的对象,从年轻代回收,在找旧生代,最后都没空间,进行垃圾的全部扫描(Full GC)。
2 System
在System类中定义有取得当前日期时间的方法currentTimeMillis()
public class demo2 {public static void main(String[] args) throws InterruptedException {long start = System.currentTimeMillis();Thread.sleep(2000);long end = System.currentTimeMillis();System.out.println("操作花费时间 = " + (end - start));}}
finalize()方法
class Person{public Person() {System.out.println("我出生了");}@Overrideprotected void finalize() throws Throwable {//临死前要说的话System.out.println("我死了");throw new Exception("我不想死");}}public class demo2 {public static void main(String[] args) throws InterruptedException {//long start = System.currentTimeMillis();//Thread.sleep(2000);//long end = System.currentTimeMillis();//System.out.println("操作花费时间 = " + (end - start));Person per = new Person();per =null;System.gc();}}
final finally finalize的区别:
final 定义不能够被继承的父类,不能够被子类所覆写的方法,定义常量
finally 在异常处理中进行异常处理的统一接口
finallize 是Object类的一个方法,是在对象回收前进行对象收尾操作
3 clone
clone():
1 返回值是Object
2 protected
3 抛出一个异常CloneNoSupportedException,需要克隆的对象必须实现Cloneable这个标识接口
class Person1 implements Cloneable{private String name;private int age;public Person1(String name , int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "姓名 :"+this.name + "年龄 :" + this.age;}@Overrideprotected Object clone() throws CloneNotSupportedException {//调用父类方法return super.clone();}}public class demo3 {public static void main(String[] args) throws CloneNotSupportedException {Person1 per1 = new Person1("张三",18);Person1 per2 = (Person1) per1.clone();System.out.println(per1.toString());System.out.println(per2.toString());}}
阅读全文
0 0
- 写给自己的JAVA工程师之路-基础类库
- 写给自己的JAVA工程师之路-抽象类
- 写给自己的JAVA工程师之路-数据链路层
- 写给自己的JAVA工程师之路-计划
- 写给自己的JAVA工程师之路-异常
- 写给自己的JAVA工程师之路-链表
- 写给自己的JAVA工程师之路-单例模式
- 写给自己的JAVA工程师之路-网络体系结构
- 写给自己的JAVA工程师之路-物理层
- 写给自己的JAVA工程师之路-接口
- 写给自己的JAVA工程师之路-MySQL函数
- 写给自己的JAVA工程师之路-枚举
- 写给自己的JAVA工程师之路-多线程
- 写给自己的JAVA工程师之路-正则表达式
- 写给自己的JAVA工程师之路-约束和修改数据表
- 写给自己的JAVA工程师之路-子查询与连接
- 写给我的JAVA工程师之路-数据表操作
- 写给自己,Java基础整理篇
- 使用后端云服务稳定吗?这TM是我的亲身经历
- ros控制虚拟和实际ur机械臂
- 牛牛的Gate One的安装指南
- 仿格瓦拉生活注册界面验证码滑动效果
- 一致性Hash算法
- 写给自己的JAVA工程师之路-基础类库
- jQuery学习笔记
- Python建立本地服务器
- 指针和数组相关运算
- valueOf()方法
- JavaWeb自主学习--css(一),day2
- Linux多线程之基本编程
- [Spark--PairRDDFunctions]--combineByKey的解释
- 安装paramiko时遇到error in cryptography setup command: Invalid environment marker: python_version < '3'