What is the difference between free and vmstat commands?

631

From the manpages: free, vmstat

free displays the total amount of free and used physical and swap memory in the system, as well as the buffers used by the kernel. The shared memory column should be ignored; it is obsolete.

vmstat reports information about processes, memory, paging, block IO, traps, and cpu activity.

The first report produced gives averages since the last reboot. Additional reports give information on a sampling period of length delay. The process and memory reports are instantaneous in either case.

Share:
631

Related videos on Youtube

NaaleinGrohiik
Author by

NaaleinGrohiik

Updated on September 18, 2022

Comments

  • NaaleinGrohiik
    NaaleinGrohiik over 1 year

    In hopes to better understand MVVM I decided to redo one of my Android projects implementing the architecture.

    One of the activities uses the Zxing library to scan a QR code. Using Zxing's event handler I would like to pass the scanned result to my viewModel to check for example if the result is a "product"(this is a QR code I generate following a product class) or not. If the the result is a product it will show a dialogue with the result asking the user if they want to continue scanning or save the product, if it is not a product then it shows a dialogue with the result and a cancel button.

    Now the issue here is that I don't know how to properly pass the data from Zxing's handler to the viewModel. Below attached my activity.

    class QRreader_Activity : AppCompatActivity(), ZXingScannerView.ResultHandler, IQRreader{
    override fun isProduct(ProductDetail: String) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }
    
    override fun isNotProduct(ScannedText: String) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }
    
    
    lateinit var mScannerView: ZXingScannerView
    var data: String="test"
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_qrreader)
    
    
        val bReturn: ImageButton = findViewById(R.id.ic_return)
        bReturn.setOnClickListener {
            onBackPressed() }
        ActivityCompat.requestPermissions(this@QRreader_Activity,
                arrayOf(Manifest.permission.CAMERA),
                1)
    
        val flashlightCheckBox = findViewById<CheckBox>(R.id.flashlight_checkbox)
    
        val contentFrame = findViewById<ViewGroup>(R.id.content_frame)
        mScannerView = object : ZXingScannerView(this) {
            override fun createViewFinderView(context: Context): IViewFinder {
                return CustomViewFinderView(context)
            }
        }
    
        contentFrame.addView(mScannerView)
        flashlightCheckBox.setOnCheckedChangeListener { compoundButton, isChecked -> mScannerView.flash = isChecked }
    }
    
    public override fun onResume() {
        super.onResume()
        mScannerView.setResultHandler(this) // Register ourselves as a handler for scan results.
        mScannerView.startCamera()          // Start camera on resume
    }
    
    public override fun onPause() {
        super.onPause()
        mScannerView.stopCamera()           // Stop camera on pause
    }
    
    override fun onBackPressed() {
        super.onBackPressed()
        val intent = Intent(this, MainActivity::class.java)
        startActivity(intent)
        finish()
    }
    //This is where ZXing provides the result of the scan
    override fun handleResult(rawResult: Result) {
        Toast.makeText(this,""+rawResult.text,Toast.LENGTH_LONG).show()
    
    }
    
    private class CustomViewFinderView : ViewFinderView {
        val PAINT = Paint()
    
        constructor(context: Context) : super(context) {
            init()
        }
    
        constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
            init()
        }
    
        private fun init() {
            PAINT.color = Color.WHITE
            PAINT.isAntiAlias = true
            val textPixelSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
                    TRADE_MARK_TEXT_SIZE_SP.toFloat(), resources.displayMetrics)
            PAINT.textSize = textPixelSize
            setSquareViewFinder(true)
        }
    
        override fun onDraw(canvas: Canvas) {
            super.onDraw(canvas)
            drawTradeMark(canvas)
        }
    
        private fun drawTradeMark(canvas: Canvas) {
            val framingRect = framingRect
            val tradeMarkTop: Float
            val tradeMarkLeft: Float
            if (framingRect != null) {
                tradeMarkTop = framingRect.bottom.toFloat() + PAINT.textSize + 10f
                tradeMarkLeft = framingRect.left.toFloat()
            } else {
                tradeMarkTop = 10f
                tradeMarkLeft = canvas.height.toFloat() - PAINT.textSize - 10f
            }
            canvas.drawText(TRADE_MARK_TEXT, tradeMarkLeft, tradeMarkTop, PAINT)
        }
    
        companion object {
            val TRADE_MARK_TEXT = ""
            val TRADE_MARK_TEXT_SIZE_SP = 40
        }
    }
    

    }

    • Alaa Ali
      Alaa Ali over 9 years
      What exactly is your question? The number that appears under the column free in the vmstat command is the same number under free in the free command. Same goes for buffers and cached.
    • nux
      nux over 9 years
      aren't the same concerning memory usage ?