文件流操作引发一系列相关问题---cpu底层-----java虚拟机

JAVA 线上故障排查思路,从 CPU、磁盘、内存、网络到GC 服务器问题排查步骤 线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不被局限在一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。 一 、cpu使用情况 top查看总体的系统硬件使用情况[ro... 阅读详情
public class Main  {
   
    public static void main(String arg[]){
    File file=new File("E:/TEST.TXT");
    if (!file.exists()) {
    try {
    file.createNewFile();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
    }

             //常用字节、字符流操作
try {
    OutputStream out=new FileOutputStream(file);
InputStream in=new FileInputStream(file);
//DataOutputStream(InputStream in)
//BufferedInputStream(inputStream in)缓存
//FileReader(file/String filename)  
//InputStreamReader(InputStread
//BufferedReader(reader in)
//RandomAccessFile(File/String,String mode)
//Serializable
//ObjectInputStream(inputStream in)
//注意:对象序列化只能保存对象的非静态成员变量的值,不能保存任何的成员函数和静态的成员变量的值
//对于某些瞬时状态对象也不能保存 如thread或者一个FlieInputStream对象,对于某些字段(不永久存储的,安全),必须使用
//transient标识,否则编译不通过 
byte arr[]=new byte[1024];

Scanner sc=new Scanner(System.in);
  arr=sc.next().getBytes();
   
System.out.print(arr[1]);

   out.write(arr);
   
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
   
    }  
    /*16位cpu
     * cpu内部:运算器、控制器、存储器
     * cpu与外部器件交流是通过外部总线的
     * 地址总线:寻址能力有关 640K 20根地址线  
     * 数据总线:cpu一个时间周期内能处理多少位的数据(寄存器有关16位)
     * 控制总线:控制总线有多少根与计算机有多少个扩展槽接口有关
     * cpu内部器件交流是内部总线
     * 运算器:加、减、乘、除
     * 段寄存器:通用寄存器16位(ax、bx、cx、dx)、代码寄存器(cs、Ip)、
     * 堆栈段寄存器(sp、ss)、数据段寄存器(ds)、
     * ax(ah,al)\x2321  ah=\x23 al=\021
     * 为什么分为ah与al呢?
     * 这是因为他们的寄存器位数为16位。而地址线是20根,导致有些地址访问不到
     * 物理地址=基地址(段地址左移一位)+偏移地址
     * 12300=10000(1000左移一位为10000)+2300
     * 执行控制:执行指令
     * 把所有外部器件所拥有的ram(随机存储、读写速度快、断电就失去记忆)或者rom(只能读不能写 )
     * 看成是一个完整的内存(物理内存),存储最小单位是一个字节 也就是8位,cpu与外部器件交流就是读写这块内存
     * 当存储一个字时,存储方式有大端小端模式,大部分cpu采用小端模式,(flash、硬盘、光盘也采用小端模式,适合计算机处理逻辑)即低位存低地址(先存低位)
     * 大端模式 即高位存地址(先存高位)符合人类逻辑。
     * A3O1 ------------>1010 0011 0000 0001(16进制对应二进制)
     * 不管是大端小端:A3是高位占8位 一个字节 01是低位
     * 在内存存储方式
     *  低端模式  低 *01*      高端模式  低*A3*
     *                         *A3*                           *01*
     *                         * *
     *                    高 * *                            高
     *  
     *  问题:
     *  单任务:一次只能运行一个程序
     *  内存小:运行一个程序,需把程序全部加载到内存
     *  不安全:直接访问物理内存,如果对bios等修改容易发生致命错误
     */
    /*32位cpu
     * 分为实模式和保护模式
     * 保存了cs/ds/es/ss寄存器为了兼容16位 但它们存的不再是段地址,而是描述是否为
     * 局部描述符表LDTR或者全局描述符表GDTR,还通过选择子从多个局部LDT或者全局描述符GDT选择一个描述符
     * 而LDTR和GDTR两个寄存器存的是当前正在使用LDT和GDT首地址
     * 访问物理内存过程:
     * 根据访问的段,选择段寄存器
     * 根据选择子描述符地址*8+描述符表标识位中的位置(从LDTR或者GDTR中找到LDT或者GDT首地址),得到段描述符地址
     * 再从段描述符地址中Base中获得段首地址
     * 物理地址 =逻辑地址中偏移地址+段首地址
     * 
     * 分页:
     * 如果段寄存器16位中那个位标识采用分页的形式访问内存,那么线性地址就是物理地址
     * 如果使用分页访问那线性地址就是逻辑地址,根据
     * 内存=虚拟内存(指定硬盘中的一个交换文件)+物理内存
     * 虚拟内存:不把程序全加载到内存,把一部分放到虚拟内存
     * 线性地址:不采用分页访问内存,线性地址就是物理地址
     * 虚拟空间(交换分区):虚拟内存,
     * 虚拟内存(注意两个概念的虚拟内存):每一个可执行文件(包含数据和代码指令)被加载器映射很多页 每页4K  当虚拟内存(逻辑的)大于
     * 物理地址时,出现缺页就发生页面交换,虚拟内存映射到虚拟内存(交换分区)充当物理内存
     * 一级页表
     * 逻辑地址(线性地址)=页号+页内地址
     * 页寄存器:存储页的起始地址与页表长度
     * 页号与页的起始地址相加得到页表在物理内存的起始地址,
     * 页表中映射规则可以得到物理页号
     * 根据物理页号和页内偏移得到实际物理地址
     * 
     * 但每次都都要访问两次物理内存,浪费资源和时间
     * 高级缓存方法:在MMU中加一个缓存区tlb(寄存器)
     * 就是把页表中的映射信息缓存起来,当访问某一个物理地址时先访问,在TLB寄存器中的页表中是否有对应的物理地址。有就
     * 不必去内存中找页表.
     * 多级页表可以扩展物理地址 满足64位系统要求
     * 
     * 由于单核处理器运行速度已经达到一个瓶颈:
     * 采用多核(横向扩展)处理器
     * 单核时代:分为单任务和多任务
     * dos是单任务的、每个任务必须来
     * 多任务:把每一个任务分为几份,让不同任务轮流来执行,由于cpu运行速度快,所以感觉是同时执行多任务的
     * 多核处理器:单核处理器一个cpu处理多个作业,发生错误就死机了,而且任务多执行就满了,采用多核技术后
     * 可以同时处理多个作业,响应快,不容易死机,但消耗大。
     */
    /**java虚拟机
     * java实现跨平台,就是使用类似代理 中间件功能----java虚拟机----把字节码文件解释成原始机器指令
     * 我们都知道机器指令是cpu能识别执行的
     * c程序经过编译连接后变成二进制机器指令------
     * java经过编译后变成二进制jvm识别的指令
     * 虚拟机功能是:jvm识别指令变成机器指令
     * 首先虚拟机在操作系统中就是一个程序,它运行时,系统会分一块内存给它。
     * 这一块内存叫运行数据区域。它分为以下几个部分:
     * 计数器:记录当前线程所执行字节码的行号 每条线程都有独立的计数器
     * jvm栈   线程私有,随线程创建而创建,里面有有基本类型变量,返回结果、非基本类型对象仅存放一个指向堆的地址
     * 堆 存放对象内存  用GC管理内存   可用-xms和-xmx设定大小,创建对象使用内存超过它大小,会发超内存错误
     * 方法区域:存放类、字段、方法、静态变量、final类型常量信息,可用-xx:permsize和-xx:maxpersize调整大小,一样超它规定最大内存会出错
     * 运行时常量池:存放类中固定的常量信息、字段、方法的引用信息,类或接口类在该类的class文件被java虚拟机成功装载时分配。
     * 本地方法堆栈
     * 
     * 类加载过程:
     * 加载-----》验证----》准备-----》解析-----》初始化
     * 加载:把class字节码文件从文件系统加载到运行数据区域(操作系统划分给虚拟机的那块内存)
     * 验证、准备、解析这三个阶段叫连接
     * 验证:验证字节码是否符合java规范和虚拟机规范
     * 准备:为这个类的成员变量分配内存并设置它的初始值为0 null 就是java默认初始值  比如int 是0 boolean是false
     * 解析:符号引用---》直接引用 即符号 ---》地址  字符--->地址数值
     * 初始化:先执行无参构造函数搜索所有的类变量赋值和static{}代码块(类变量赋值和静态代码块是在编译器编译时收集合成在无参构造函数中),这个无参构成函数防止多个线程同时操作,采用加锁或者同步方法。
     * 如果一个类或者接口没有类变量赋值或者static{}代码块,可以不生成构造函数
     * 接口不能使用静态语句块,但可以赋值,所以生成无参构造函数,但不要求先执行父类的构造函数
     * 
     * 类加载器组成
     * Bootstrap class loader:
     * 当运行java虚拟机时,这个类加载器被创建,它加载一些基本的java API,包括Object这个类。
     * 需要注意的是,这个类加载器不是用java语言写的,而是用C/C++写的。
     * Extension class loader:
     * 这个加载器加载出了基本API之外的一些拓展类
     * -System Class Loader:
     * 它加载应用程序中的类,也就是在你的classpath中配置的类。
     * User-Defined Class Loader:
     * 这是开发人员通过拓展ClassLoader类定义的自定义加载器,加载程序员定义的一些类。
     * 
     * 
     * 当用户自定义加载器加载一个类时,先从System 命名空间判断是否有该类了,没有就委派给上一层
     * Extension,没有就给Bootstrap,也没有,就往下开始加载,直到有结果。
     * 注意:特定的类加载器只能加载一个类,但一个类可以被多个类加载器加载
     * 
     */
    //java调用外部程序
    /*每个运行的应用程序都有一个Runtime类,它不能创建实例,只能由getRuntime()方法获得
     * 1 它可以调用系统程序,或者执行系统dos命令
     * 2 它还可以调用gc(),运行无用单元自动收集器,调用freeMemory(),totalMemory()查看堆内存使用情况
     * 
     */
}
王道考研计算机网络课件全解析:从零搭建你的知识框架(附B站视频+PPT下载) 本文全面解析王道考研计算机网络课程的核心知识体系,从OSI七层模型到TCP/IP四层架构,详细讲解物理层、数据链路层、网络层、传输层和应用层的关键技术。提供高效学习路径、实战案例和常见误区警示,帮助考生系统构建计算机网络知识框架,适合计算机考研备考者参考学习。 阅读详情

相关推荐

Materials - UE5中的PivotPainter

可以使用3DS Max Script中的脚本(Pivot Painter)对模型进行处理,让每个Element都有自己的Pivot Point,来方便控制和制作一些特殊的顶点动画效果;

GT的虚幻引擎文档 1289

使用Jstack生产环境OOM排查经历

2021-04-18日,生产服务器主备机器资源报警,进程OOM,下面是排查问题的全过程 通过top查看到了cpu占用比较高的应用服务,我们的服务器上部署了多个应用,探查到cpu占用率400%; 使用 ps -mp pid -o THREAD,tid,time |sort -rn 命令查看当前pid 占用资源较高的线程tid并进行排序 将线程格式转换为16进制后 printf “%x\n” tid 得到十六进制后的线程tid后使用 jstack pid |grep tid -A 30 查看线程的堆栈信息.

suodod的博客 734

R语言分布式滞后非线性模型DLNM实战:空气污染与健康数据的动态效应可视化与政策启示

本文详细介绍了R语言中分布式滞后非线性模型(DLNM)的应用,特别关注空气污染与健康数据的动态效应可视化。通过dlnm包实现PM2.5等污染物的滞后效应分析,提供从数据预处理、模型构建到结果可视化的完整流程,并探讨了其在公共卫生政策制定中的实际应用价值。

weixin_29079643的博客 514

Java死循环执行InputStream.available()导致CPU占满

Java死循环执行in.available()导致CPU占满-解决办法 问题详细 发现Java应用服务器常年cpu占满的状态,执行top命令发现是某个java进程占满cup资源。如果网络请求并发大的话,可能直接导致宕机 具体原因 通过几行linux命令,定位到看如下代码: InputStream in = null; in = socket.getInputStream(); int count ...

wodejava2012的博客 1889

使用Python开发TreeATE的测试脚本常见问题

ImportError: No module named py_compile 找不到 DevLangPython3.dll 以上2个问题都是没有安装正确的Python,当前TreeATE依赖32位Python 2.7版本,暂时不支持Python 3以上版本

蓝白云的专栏 1033

find命令

命令是 Linux/Unix 系统中用于搜索文件和目录的强大工具,支持多种搜索条件组合,并能对搜索结果执行各种操作。以下是其详细说明、常用参数及示例: 搜索路径:指定起始目录(如 、 或 表示当前目录)。 查找条件:基于文件名、类型、大小、时间等属性过滤。 处理动作:对匹配结果执行操作(如打印、删除、执行命令等)。 常用参数及示例 1. 按名称查找 :区分大小写匹配文件名。 :不区分大小写匹配文件名。 2. 按文件类型查找 :指定文件类型。 文件类型: :普通文件 :目录 :符号链接

qiao2458的博客 1137

JAVA虚拟机详解

JVM虚拟机详解

snowing1997的博客 786

在Ubuntu22.04.2远程服务器上搭建OHIF+Orthanc

在Ubuntu远程服务器上不翻墙,但是本地windows需要科学上网开始之前,首先在终端输入export -p查看是否有代理端口如下如果有就关了,输入如下命令。

weixin_51116549的博客 1339

JVM学习——类加载详解

类加载的时机 遇到new(比如new Student())、getstatic和putstatic(读取或设置一个类的静态字段,如下代码,读取被final修饰并已在编译器把结果放入常量池的静态字段除外)、invokestatic(调用类的静态方法)这四条指令时,如果对应的类没有初始化,则要对对应的类先进行初始化。 public class Student{ private static int age; public static void method(){ } } Student.age St

code_way的博客 1132

CTP-API开发系列之三:柜台系统简介

综合交易平台(Comprehensive Transaction Platform,CTP)是专门为期货公司开发的一套期货经纪业务管理系统,由交易、风险控制和结算三大系统组成。接下来分享的内容,对于期货公司的负责交易、运维同事会比较熟悉,针对CTP-API接口对接的朋友可以了解一下,在接口之上的系统是怎样的。

码上助君的专栏 6201

Test-Time Adaptation Induces Stronger Accuracy and Agreement-on-the-Line

TTA不管是否提高了OOD的泛化性都增强了线性的趋势,TTA的初始目的是为了增强OOD的表现,一个人可能会觉得TTA使得ACL更强的原因是他消除了ID和OOD之间的差距,因此所有模型间ID vs OOD的准确率接近于y=x这条线,但是实际上这个解释不能够反映我们的经验发现,因为虽然TTA将分布之间的偏移简化为一种放缩的分布,但是这个放缩的因子幅值可能很大,也就是α<<1但是r>>1,这就会导致很偏离y=x这条线,而且理论分析也是,虽然ID和OOD的差距很大,但是线性关系还在。

m0_62673638的博客 148

java文件流下载大文件内存溢出

java下载大文件内存溢出 OOM解决方案

greenhandp的博客 8208

【AI就业干货12】机器学习八股文速通:从损失函数到 XGBoost,一篇带走全部面试点

本文总结了机器学习面试的核心知识点,涵盖监督与非监督学习、线性模型、正则化、决策树、KNN/K-means、SVM、集成学习、梯度下降、评估指标、特征工程、降维、概率模型等内容。重点包括:损失函数选择(MSE/交叉熵)、正则化作用(L1稀疏/L2平滑)、决策树划分准则、集成学习方法(Bagging降方差/Boosting降偏差)、XGBoost优化等。提供了30秒速记口诀和XGBoost代码示例,帮助快速掌握面试要点。全文采用公式+代码+口诀的形式,系统梳理了机器学习从理论到实践的常见考点。

m0_51738372的博客 731

Java虚拟机:类加载过程

在冯诺依曼的计算机模型中,任何程序都要加载到内存才能与CPU进行交流。字节码.class文件同样需要加载到内存中,才可以实例化。 其中,类加载器ClassLoader的使命就是加载.class文件到内存中。 在加载类时,使用的是Parents Delegation Model,即双亲委派模型。 Java类加载器是一个运行时核心基础设施模块,如下图,主要是在启动之初进行类的加载(Lo...

a447942008的博客 140

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java项目运维总结记录

一、常见故障 1.1、Java项目CPU耗用突增100%分析定位 1)执行top命令确认当前占用cpu的的java进程;以下是一些快捷键: ?:显示在top当中可以输入的命令 P:以CPU的使用资源排序显示 M:以内存的使用资源排序显示 N:以pid排序显示 T:由进程使用的时间累计排序显示 k:给某一个pid一个信号。可以用来杀死进程 r:给某个pid重新定制一个nice值(即优先级) q:退出top(用ctrl+c也可以退出top)。 2)确认异常进程的具体线程:上述界面按H键或执行top -Hp ja

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 1666

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Java SE笔记

目录一、Java语言特点Java两种核心机制Java虚拟机垃圾收集二、语法标识符Java中名称命名规范关键字、保留字局部变量、成员变量基础类型变量(4类8种)基本类型的转换强制转换数组数组元素的引用数组元素的默认初始化数组中涉及的常见算法数组操作常见问题引用类型数据类型之间的转换运算符运算符的优先级程序流程控制方法三、面向对象面向过程和面向对象对象和类的概念类之间的关系为什么用对象?成员变量对象和...

oayoat blog 3458

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java导出excel并下载前端js,隔壁都馋哭了

直击面试 反正我是带着这些问题往下读的 说一下 JVM 运行时数据区吧,都有哪些区?分别是干什么的? Java 8 的内存分代改进 举例栈溢出的情况? 调整栈大小,就能保存不出现溢出吗? 分配的栈内存越大越好吗? 垃圾回收是否会涉及到虚拟机栈? 方法中定义的局部变量是否线程安全? 运行时数据区 内存是非常重要的系统资源,是硬盘和 CPU 的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略,保证了 JVM 的高效稳定运行。不同的

imtokenmax众筹 227

【面试高高手】—— Java进阶

Java面试题——进阶

是江迪呀 的博客 853

java面试题总结(二)----java中级面试题 含答案

一、Java基础 1. 实例方法和静态方法有什么不一样? 2. Java中的异常有哪几类?分别怎么使用? 检出异常,非检出异常。检出异常需要try...catch才能编译通过。非检出异常不用try...catch也能编译通过。 RuntimeException是非检出异常,不需要try...catch也能编译通过。 IoException,SQLException等等其他所有异常都是检出...

ywl470812087的博客 12万+

# 20145106 《Java程序设计》第6周学习总结

教材学习内容总结 来源和目的都不知道的情况下还是可以撰写程序的,有这类需求的时候,可以设计一个通用的dump()方法。dump方法接受inputstream与outputstream实例,分别代表读取数据的来源,以及输出数据的目的地。在进行inputstream与outputstream的相关操作若发生错误,会抛出java.io.IOException异常。 dump()方法并没有限定来...

weixin_30411239的博客 62

面试中必会的Java基础之GC算法篇(初学者篇)

Java重要的GC机制,Java的四大引用,ART与Dalvik区别,内存抖动,内存泄露,OOM之间的关系,GCRoot对象的讲解之类

2301_80329517的博客 834

常见的Java开发难题包含解决办法内存泄漏异常处理代码质量和维护

学习总结1、掌握入门到进阶知识(持续写作中……2、学会数据库入门到入土用法(创作中……3、手把手教你开发炫酷的制作(完善中……4、牛逼哄哄的编程利器技巧(编写中……5、面经吐血整理的技巧(更新中……

JAVA开发CRM范的博客 1476

JVM虚拟机内存模型、垃圾回收算法以及类加载机制详解

从jvm内存模型到字节码文件、垃圾回收器、回收算法,以及常见的面试题等都有说到

酸萝卜别吃 1306

java trunked_Http协议Content-Length详解

前言http协议是互联网中最重要的协议之一,虽然看上去很简单,但是实际中经常遇到问题,我们就已经遇到好几次了。有长连接相关的,有报文解析相关的。对http协议不能一知半解,必须透彻理解才行。本文通过一个线上实例,详细介绍http协议中的content-length字段。问题我们的手机App在做更新时会从服务器上下载的一些资源,一般都是一些小文件,更新的代码差不多是下面这样的:static void...

weixin_42298128的博客 1187

Java场景化面经分享(一)—— JVM有关

摘要:博主推出全新后端学习系列,聚焦场景化知识关联JVM核心机制。首期包含4个典型场景:1)类加载冲突问题(双亲委派模型与解决方案);2)内存泄漏排查(堆分析工具使用);3)高并发优化(对象创建与锁竞争处理);4)系统级GC选型策略(金融/离线系统差异配置)。通过实际问题解析JVM底层原理,提供生产环境实用方案,替代原有AI面经系列。下期预告K8S专题更新。(149字)

qq_53609042的博客 1258

PHP运行流程图解

CGI 概念:CGI是common gateway interface的缩写,译作通用网关接口,但很不幸,我们无法见名知意,我们知道,web服务器所处理的内容都是静态的,要想处理动态内容,需要依赖于web应用程序,如php、jsp、python、...

chipiaobai6529的博客 1321
上一篇: java 多线程
下一篇: 设计模式
lu93it
博客等级 码龄11年 8粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值