有效的括号

本文详细介绍了Java运行时数据区的组成,包括程序计数器、虚拟机栈、本地方法栈、堆和方法区,以及各部分的作用。同时,文章深入讲解了类加载的过程,包括加载、验证、准备、解析和初始化五个阶段。此外,还阐述了垃圾回收(GC)的基本概念,指出GC主要负责堆和方法区的内存释放。通过对Java内存管理的深入理解,有助于优化程序性能。
摘要由CSDN通过智能技术生成
  1. 有效的括号 https://leetcode-cn.com/problems/valid-parentheses/

     public boolean isValid1(String s) {
            Stack<Character> stack = new Stack<Character>();
            char[] chars = s.toCharArray();
            for (char aChar : chars) {
                switch (aChar){
                    case '}':
                        if (stack.isEmpty()||stack.pop()!='{'){
                            return false;
                        }
                        break;
                    case ']':
                        if (stack.isEmpty()||stack.pop()!='['){
                            return false;
                        }
                        break;
                    case ')':
                        if (stack.isEmpty()||stack.pop()!='('){
                            return false;
                        }
                        break;
                    default:
                        stack.push(aChar);
                        break;
                }
            }
            return stack.empty();
        }
    
  2. Java运行时数据区都有哪几块组成

    pc程序计数器:指定当前代码执行的位置

    虚拟机栈:存储栈帧,每一个方法运行会创建一个栈帧,栈帧中有局部变量、操作数栈、动态链接、方法返回地址。

    本地方法栈:加载本地native方法

    堆:所有线程共享,内存中最大一块,存储实例化对象以及数组,分为新生代、老年代、永久代(jdk1.7),新生代gc为minorgc,老年代gc为majorgc

    方法区:所有线程共享,存储类的类型信息、常量、静态变量、编译后的代码缓存,jdk1.7存储在永久代,1.8之后类的元数据信息存储在元空间,使用的是本地内存。

  3. 类加载过程

    加载:预加载:虚拟机启动时加载JAVA_HOME/lib/下的rt.jar下的.class文件。

    ​ 运行时加载:虚拟机在用到一个.class文件时,会去内存查看是否被加载,如果没有会按照类的全限定名来加载这个类。

    ​ (1)获取class文件二进制流

    ​ (2)将类信息、静态变量、字节码、常量这些.class文件中的内容放入方法区

    ​ (3)在内存中生成.class文件的java.lang.Class对象

    验证:文件格式验证,元数据验证,字节码验证,符号引用验证

    准备:准备阶段是正式为类变量分配内存并设置其初始值的阶段,这些变量所使用的内存都将在方法区中分配。static变量赋予初始值,final static变量会赋值代码中的初始值。

    解析:虚拟机将常量池内的符号引用替换为直接引用的过程。

    初始化:初始化阶段就是执行类构造器<clinit>()方法的过程, 它是Javac编译器的 自动生成物。
    <clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{})中语句合并产生。
    子类<clinit>()方法执行前,父类<clinit>()方法先执行。

  4. gc的理解

gc,垃圾回收,对虚拟机内存进行释放,在Java中,new出的实例存放在堆中,通过一些策略对实例进行回收,gc回收区域一般在堆和虚拟机方法区中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值