进程:
文本区域、数据区域、和堆栈。
- 文本区域存储处理器执行的代码。
- 数据区域存储变量和进程执行期间使用的动态分配的内存。
- 堆栈区域存储着活动调用过程调用的指令和本地变量。
程序是一个没有生命的实体,只有在服务器运行它时,它才是一个活动的实体被称为进程。当一个程序进入内存时,即变成一个进程。
进程状态:
进程还有三个状态,就绪,运行和阻塞。
- 就绪状态:获取了除cpu外的所有资源,只要处理器分配资源就可以马上执行。
- 运行状态:运行状态就是获得了处理器的资源,程序开机执行。
- 阻塞态:当程序执行条件不够,需要等待条件满足时候才能执行,例如等待i/o操作的时候。
进程通信
进程通信通过ipc机制,而线程通信则通过对全局字段的读写。需要进程间同步和互斥的手段的辅助,以保证数据的一致性。
常见的进程通信方式
- 管道:管道是一种半双工通信方式,数据只能单向流动。而且只能在有亲缘关系的进程间使用,这里一般指父子进程。
- 命名管道:有名管道也是一种半双工的通信方式,但是它允许不是亲属关系的进程通信。
- 消息队列:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
- 共享存储:共享内存就是映射一段能被其他进程访问的内存,这段共享内存由一个进程创建,但多个进程都可以进行访问,共享内存是最快的ipc方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他机制配合使用,来实现进程的同步和通信。
- 信号量:信号量是一个计数器,可以控制多个进程对资源的访问,它常作为一种锁机制,防止某进程正在访问资源时,其他进程也访问该资源。因此作为进程之间以及同一进程内的不同线程之间同步的手段。
- 套接字:套接口也是一种进程间通信机制,与其他机制不同的是,它可用于不同及其间的进程通信
- 信号:信号是一种比较复杂的通信方式,用于接收进程的某个事件已经发生。
内存溢出和内存泄漏
- 内存溢出:指程序在申请内存时,没有足够的空间供其使用
- 内存泄漏:指程序分配出去的内存不再使用,但无法进行回收
面对对象&面向过程
面向过程
1.优点:性能比面对对象高,因为类的调用需要实例化,开销比较大
2.缺点:没有面对对象容易维护
面向对象
- 优点:易维护、易复用、易拓展、由于面对对象有封装继承多态的特性,可以设计出低耦合的程序
2.缺点:性能比面向过程低
java的四个基本特性
1.抽象:把现实生活中的某一类东西提取出来,成为该类东西特有的共同特性,抽象壁板分为数据抽象和过程抽象,数据抽象是对象的属性,过程抽象是对象的行为特征。
2.封装:把客观事物进行封装成抽象类,该数据和方法只让可信的类操作,对不可信的类隐藏,封装分为属性封装和方法封装。
- 继承:从已有的类中派生出新的类,新的类吸收已有类的数据属性和行为,并能扩展新的能力
4.多态:同一个行为具有多个不同表现形式或形态的能力,多态的前提是类与类之间必须存在关系,要么继承要么实现。
抽象类和接口的区别
1.抽象类和接口分别给出了不同的语法定义。
2.抽象是对类的抽象,接口是对行为的抽象。
3.抽象所体现的是继承关系,是一种“is -a ”关系,接口仅仅实现接口的定义的契约,是一种“like- a”关系
4.抽象是自底向上抽象的,接口是自顶向下设计出来的。
自动拆箱和装箱
Java采用了自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率
1.装箱:将基本数据类型包装成它们的引用类型
2.拆箱:将包装类型转换为基本数据类型
序列化和反序列化
- 对象的序列化:是把对象转换成字节序列的过程。
- 对象的反序列化:是把字节序列恢复为对象的过程。
对象序列化的主要用途:
- 可以将字节永久的保存在硬盘中,通常放在文件中
- 可以在网络上传送字节序列
- 两个线程在进行远距离通信时,彼此可以发送各种类型,发送方需要把java对象转换为字节序列,接收方字需要把字节序列再恢复为java对象。
编译和运行
1.编译时和运行时:
- 编译时:将java文件编译成.class文件的过程,不涉及到内存的分配。
- 运行时:将虚拟机执行.class文件的过程,设计到内存的分配
- 编译时类型和运行时类型
- 在编译时,调用的是声明类型的成员方法
- 在运行时,调用的是实际类型的成员方法
- 对于调用引用实例的成员变量,无论是编译还是运行,均是编译时类型的成员变量
gc简述
当程序员创建对象时,gc就开始监控这个对象的地址,大小以及使用情况。通常,gc采用有向图的方式记录管理堆中所有的对象,通过这种方式确定哪些对象时“可达的”,哪些对象是“不可达的”。当gc确定一些对象为不可达时,gc就有责任回收这些内存空间。但是,位置保证GC能够在不同平台实现的问题,Java规范对gc的很对行为都没有进行严格规定。(青年代老年代gc回收机制。)
java中的4中引用类型
- 强引用:从不回收,对象一直存在,当jvm停止的时候才被终止。
- 软引用:可以和引用队列联合使用,当内存不足时终止。
- 弱引用:可以和引用队列联合使用,当内存不足时触发gc被终止
- 虚引用:必须和引用队列李兰和使用,随时会被回收,触发gc后被终止。
软应用多用于缓存图片内存资源,而弱引用多用于内存泄漏的解决。
弱引用可以通过手动gc进行清除
字符串相关
String、StringBuffer和StringBuilder
- 可变性
- String类使用数组保存字符串,所以String对象不可变。每次更改字符串都需要新建新的对象。
- StringBuffer类和StringBuilder类都是继承AbstractStringBuilder类。AbstractStringBuilder在更改字符串时不需要新建新的对象。消耗时间比String要短,性能好。但是StringBuffer比StringBuilder要稍微耗时一些。是因为StringBuffer中添加了同步锁,所以要求线程安全时要使用StringBuffer。