Re 1) The data associated with each output pin of a node is stored in a temporary data file (.brd file). These files are stored on disk, they are not held in-memory so do not consume RAM - but they will consume disk space. The format of a .brd file is not a .csv and there may be some improvement in the stored file size compared with the input .csv file but, essentially, you will be consuming GBs of disk space if a large data file is processed through multiple Transform nodes. The temporary data files generated (implicitly) by the system are purged according to the system's data retention settings that are configured for ad-hoc data flow execution runs and for scheduled executions of data flows.
Re 2) The system's temporary data directory (<Data360Analyze data directory>/data-<port number>/executions ) contains one or more directories for each user of the system (only 'admin' on a desktop instance). On a Server instance the user's id (e.g. 'bob') is used as the directory name. The temporary data generated by a user's data flow will be stored in a sub-directory of their main directory e.g. executions/bob/<data_flow_name>/
The executions directory also contains a 'cache' directory. The contents of the executions/cache directory should NOT be deleted as this can cause problems. This directory contains (among other things) compiled versions of the java code for nodes that have been executed. The compiled node components are used for subsequent execution of a node to improve performance.
Re 3) You can use a checkpoint node to write the data but you would need to explicitly define the CheckpointFileame property rather than using the default {{^handle^}} textual substitution value of the property as this is different for each node. A checkpoint node wil not run if it's input pin is not connected so you cannot use it without an upstream node to start it's execution.
The Checkpoint node is a composite node that leverages nodes that write and read .brd files. It may be more transparent (from a data flow logic perspective) to simply use an Output BRD node to write the imported data and then use separate BRD File nodes eleswhere in your data flow to read in the data from the explicitly defined .brd file. You should consider implementing logic to delete explicitly created .brd files as the system will not include these in the temporary data purge mechanism.
4) There is a system property that defines the maximum number of threads available in the container. Only Java-based nodes are eligible to run in-container. However, not all Java-based nodes run in-container (e.g. the JDBC Query node). Nodes do not have to be connected to run in-container. When an eligible node is ready to be run if the limit on the maximum number of concurrently running nodes has not been reached then the system will attempt to run it in the container. If the limit has been met then the node will run in it's own process space.
The thread limit can be configured in your cust.prop via the property: ls.brain.server.nodeContainer.inContainerPoolSize
In practice, the decision to run an eligible node in-container depends on a number of factors including the type of node is being run, the number of fields in the input data and the number of records in the data. For some nodes that have a large number of data 'cells' in their input data, they will be run in their own process space.
The Python node does not use Jython (and it's not Java based) - the Python node leverages CPython, allowing it to execute third-party Python packages that are written in C/C++. The Python node always runs in it's own process space.