美文网首页
java 基础

java 基础

作者: 小庄bb | 来源:发表于2019-03-14 21:46 被阅读0次

进程:

文本区域、数据区域、和堆栈。

  • 文本区域存储处理器执行的代码。
  • 数据区域存储变量和进程执行期间使用的动态分配的内存。
  • 堆栈区域存储着活动调用过程调用的指令和本地变量。
    程序是一个没有生命的实体,只有在服务器运行它时,它才是一个活动的实体被称为进程。当一个程序进入内存时,即变成一个进程。
进程状态:

进程还有三个状态,就绪,运行和阻塞。

  • 就绪状态:获取了除cpu外的所有资源,只要处理器分配资源就可以马上执行。
  • 运行状态:运行状态就是获得了处理器的资源,程序开机执行。
  • 阻塞态:当程序执行条件不够,需要等待条件满足时候才能执行,例如等待i/o操作的时候。
进程通信

进程通信通过ipc机制,而线程通信则通过对全局字段的读写。需要进程间同步和互斥的手段的辅助,以保证数据的一致性。

常见的进程通信方式
  • 管道:管道是一种半双工通信方式,数据只能单向流动。而且只能在有亲缘关系的进程间使用,这里一般指父子进程。
  • 命名管道:有名管道也是一种半双工的通信方式,但是它允许不是亲属关系的进程通信。
  • 消息队列:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  • 共享存储:共享内存就是映射一段能被其他进程访问的内存,这段共享内存由一个进程创建,但多个进程都可以进行访问,共享内存是最快的ipc方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他机制配合使用,来实现进程的同步和通信。
  • 信号量:信号量是一个计数器,可以控制多个进程对资源的访问,它常作为一种锁机制,防止某进程正在访问资源时,其他进程也访问该资源。因此作为进程之间以及同一进程内的不同线程之间同步的手段。
  • 套接字:套接口也是一种进程间通信机制,与其他机制不同的是,它可用于不同及其间的进程通信
  • 信号:信号是一种比较复杂的通信方式,用于接收进程的某个事件已经发生。

内存溢出和内存泄漏

  • 内存溢出:指程序在申请内存时,没有足够的空间供其使用
  • 内存泄漏:指程序分配出去的内存不再使用,但无法进行回收

面对对象&面向过程

面向过程

1.优点:性能比面对对象高,因为类的调用需要实例化,开销比较大
2.缺点:没有面对对象容易维护

面向对象
  1. 优点:易维护、易复用、易拓展、由于面对对象有封装继承多态的特性,可以设计出低耦合的程序
    2.缺点:性能比面向过程低

java的四个基本特性

1.抽象:把现实生活中的某一类东西提取出来,成为该类东西特有的共同特性,抽象壁板分为数据抽象和过程抽象,数据抽象是对象的属性,过程抽象是对象的行为特征。
2.封装:把客观事物进行封装成抽象类,该数据和方法只让可信的类操作,对不可信的类隐藏,封装分为属性封装和方法封装。

  1. 继承:从已有的类中派生出新的类,新的类吸收已有类的数据属性和行为,并能扩展新的能力
    4.多态:同一个行为具有多个不同表现形式或形态的能力,多态的前提是类与类之间必须存在关系,要么继承要么实现。
抽象类和接口的区别

1.抽象类和接口分别给出了不同的语法定义。
2.抽象是对类的抽象,接口是对行为的抽象。
3.抽象所体现的是继承关系,是一种“is -a ”关系,接口仅仅实现接口的定义的契约,是一种“like- a”关系
4.抽象是自底向上抽象的,接口是自顶向下设计出来的。

自动拆箱和装箱

Java采用了自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率
1.装箱:将基本数据类型包装成它们的引用类型
2.拆箱:将包装类型转换为基本数据类型

序列化和反序列化
  • 对象的序列化:是把对象转换成字节序列的过程。
  • 对象的反序列化:是把字节序列恢复为对象的过程。
    对象序列化的主要用途:
  1. 可以将字节永久的保存在硬盘中,通常放在文件中
  2. 可以在网络上传送字节序列
  3. 两个线程在进行远距离通信时,彼此可以发送各种类型,发送方需要把java对象转换为字节序列,接收方字需要把字节序列再恢复为java对象。
编译和运行

1.编译时和运行时:

  • 编译时:将java文件编译成.class文件的过程,不涉及到内存的分配。
  • 运行时:将虚拟机执行.class文件的过程,设计到内存的分配
  1. 编译时类型和运行时类型
  • 在编译时,调用的是声明类型的成员方法
  • 在运行时,调用的是实际类型的成员方法
  • 对于调用引用实例的成员变量,无论是编译还是运行,均是编译时类型的成员变量

gc简述

当程序员创建对象时,gc就开始监控这个对象的地址,大小以及使用情况。通常,gc采用有向图的方式记录管理堆中所有的对象,通过这种方式确定哪些对象时“可达的”,哪些对象是“不可达的”。当gc确定一些对象为不可达时,gc就有责任回收这些内存空间。但是,位置保证GC能够在不同平台实现的问题,Java规范对gc的很对行为都没有进行严格规定。(青年代老年代gc回收机制。)

java中的4中引用类型
  • 强引用:从不回收,对象一直存在,当jvm停止的时候才被终止。
  • 软引用:可以和引用队列联合使用,当内存不足时终止。
  • 弱引用:可以和引用队列联合使用,当内存不足时触发gc被终止
  • 虚引用:必须和引用队列李兰和使用,随时会被回收,触发gc后被终止。
    软应用多用于缓存图片内存资源,而弱引用多用于内存泄漏的解决。
    弱引用可以通过手动gc进行清除

字符串相关

String、StringBuffer和StringBuilder
  • 可变性
  1. String类使用数组保存字符串,所以String对象不可变。每次更改字符串都需要新建新的对象。
  2. StringBuffer类和StringBuilder类都是继承AbstractStringBuilder类。AbstractStringBuilder在更改字符串时不需要新建新的对象。消耗时间比String要短,性能好。但是StringBuffer比StringBuilder要稍微耗时一些。是因为StringBuffer中添加了同步锁,所以要求线程安全时要使用StringBuffer。

相关文章

  • Java 基础

    Java 基础01Java开发入门 Java 基础02Java编程基础 Java 基础03面向对象 Java 基础...

  • 技术体系

    一,java核心 java基础,jvm,算法,多线程,设计模式 Java基础:java基础相关,全栈java基础 ...

  • 面试题汇总

    1.Java基础面试问题 Java基础之基础问题 Java基础之面向对象 Java基础之数据结构 Java基础之I...

  • 【Android】知识点汇总,坚持原创ing

    Android基础 Java基础 Java基础——Java内存模型和垃圾回收机制 语法基础 语法基础——C语法基础...

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • Java基础:注解

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 概述 注解...

  • Java基础:动态代理

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 概述 在运行时,...

  • Java 集合类原理

    Java基础——HashMap源码分析 Java基础——HashSet源码分析 Java基础——HashTable...

  • Java基础:类加载器

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 什么是类加...

  • java基础(一)-String、StringBuffer、St

    java基础-String、StringBuffer、StringBuilder java基础小白,初学java,...

网友评论

      本文标题:java 基础

      本文链接:https://www.haomeiwen.com/subject/abfluqtx.html